|
166 / 90 / 38
Регистрация: 29.06.2015
Сообщений: 1,100
|
|
Зачем используют сессии?09.10.2020, 20:20. Показов 4635. Ответов 85
Метки нет (Все метки)
Достаточно долгое время занимаюсь веб технологиями и PHP и до сих пор не могу понять зачем (не как, а зачем) используют сессии.
Опишу механизм сессии упрощенно При сессии пользователю ставится cookie с идентификатором сессии (для PHP - PHPSESSID). Вся информация пользователя, которую надо сохранить, сохраняется в файлах на сервере. И при обращении пользователя, сервер читает идентификатор (PHPSESSID) и ищет файлы ассоциированные с этим идентификатором. Фактически сессия - это куки на сервере. Механизм кук более простой. Вся информация пользователя, которую надо сохранить, сохраняется в файлах на компьютере пользователя (в файлах, называемых cookie). И оттуда же читается. В чем проблема Проблема в том, что срок жизни сессии устанавливается на сервере. В связи с этим возникает множество неудобств 1) По умолчанию он 24 минуты. 2) Не всегда есть доступ к php.ini. (Обычный хостинг) 3) Максимальный срок жизни сессии 24 часа. Моя задача, как программиста сделать использование сайта максимально удобным. Да и как пользователь я хочу чтобы мне было комфортно работать в интернете. Часто возникает ситуация, что я авторизовавшись работаю с сайтом. И после закрытия браузера (или через определенное время) моя авторизация пропадает. Нужно вводить данные снова. Это не удобно. С куками, таких проблем, разумеется нет. Зачем используют сессии, когда есть куки? Куки удобнее, проще, универсальнее. Не будет "автовыхода" с сайта. Человек сам решит когда ему выйти. Не нужно настраивать сервер. Данные каждого человека хранятся на его компьютере (в его куках). Сплошные преимущества.
0
|
|
| 09.10.2020, 20:20 | |
|
Ответы с готовыми решениями:
85
Зачем нужны сессии? Зачем используют Eclipse? |
|
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,834
|
||
| 10.10.2020, 17:02 | ||
|
А теперь такая ситуация - вы не входили на сайт с конкретного устройства к примеру год. И тут не известно вы ли это вообще, может устройством уже пользуется другой человек. Поэтому нужно ограничить срок действия токена. Далее 2 варианта 1) автоматически продлевать токен, пока вы активно пользуетесь сайтом - вас не будет выкидывать. А если вы давно не заходили - тогда нужно будет войти. 2) просто когда истекает срок действия заставить войти, генерируя новый токен. 3) совместить 2 варианта. Если генерировать общий токен для всех устройств, то какие тут могут быть проблемы? Допустим вы сделали токен на 30 дней. Потом в последний день зашли с другого устройства - и получается можете его продлить и для другого устройства тоже. Либо вас выкинет через 5 минут, так как текущий токен закончился. Именно поэтому для каждого отдельного устройства генерируется свой - где у каждого свой срок действия. Когда я захожу с одного устройства - это никак не влияет на токен и его срок действия другого устройства. Далее можно в БД кроме самого токена еще и записывать само устройство - тогда мы можем сделать так, чтоб если каким-то образом токен удалось украсть, то по нему не могли зайти с другого устройства.
0
|
||
|
Заблокирован
|
||
| 10.10.2020, 17:23 | ||
![]() смотрим такую ситуацию: я залогинен с ПК, кто-то залогинился с ТЕЛА, меня на ПК выкидывает тут либо можно сообщить пользуну, что на аккаунте несколько устройств и предложить ему провериться он ли это либо он будет спокойно сидеть с нескольких устройств и ничего не заметит, что его ломанули либо он залогинится и злоумышленника выкинет и тот опять залогинится и тебя выкинет и ты обратишься в обратку что что-то не так либо тупо сменишь пасс и залогинишься ОДИН
0
|
||
|
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,834
|
||
| 10.10.2020, 17:29 | ||
|
А так как раз за счет того, что у вас в БД хранятся токены всех устройств - то когда появляется новое устройство - можно оповещать пользователя, что произошел вход/попытка входа с такого-то устройства, в таком-то городе, вам в VK не приходили такие сообщения? Тогда пользователь сам решит, что делать. Если это был не он, то подстрахуется и поменяет пароль. Нажмет кнопку "выйти из под всех устройств" и т.д.
0
|
||
|
1308 / 1000 / 232
Регистрация: 01.10.2018
Сообщений: 3,893
|
||||
| 10.10.2020, 17:30 | ||||
Появляется зависимость от рабочего каталога. Программные файлы не должны от этого зависеть.Не разводите оффтоп. Т.е. на это сообщение лучше не отвечать.
0
|
||||
|
Заблокирован
|
|||
| 10.10.2020, 17:41 | |||
![]() какая зависимость? ![]() мы каталог сменили и вместо require dirname(__DIR__) . '/путь'; пишем просто ВЕЗДЕ В ЛЮБОМ МЕСТЕ СКРИПТА require 'путь'; магия ![]() потом смотрим в регене скрипт полсекунды вместо одной тысячнойсуперпрограммист я так думаю потерялся в своём симфони, помешался на ООП и решил что вызов интерпретатора работает как синглтон и можно одну и ту же функцию юзать без затрат, интерпретатор же уже вызвали ![]() ну это всё лирика, но return dirname(__DIR__) в методе getProjectDir() - это было круто
0
|
|||
|
1308 / 1000 / 232
Регистрация: 01.10.2018
Сообщений: 3,893
|
|
| 10.10.2020, 17:43 | |
|
0
|
|
|
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,834
|
||
| 10.10.2020, 17:45 | ||
|
Как правило все пути к файлам (либо путь к папке, где должен находиться файл) прокидываются в качестве настроек в конструктор служебных классов только таким образом можно избавиться от зависимости путей. И тогда chdir(dirname(__DIR__)); никак на это не влияет. При должной архитектуре никаких проблем с этим быть не должно. И такой способ на самом деле достаточно часто используют, чтоб вместо dirname(dirname(dirname(__DIR__))) - писать путь от корня.
0
|
||
|
1308 / 1000 / 232
Регистрация: 01.10.2018
Сообщений: 3,893
|
||
| 10.10.2020, 17:47 | ||
|
0
|
||
|
Заблокирован
|
||||
| 10.10.2020, 17:56 | ||||
![]() Добавлено через 1 минуту ![]() Добавлено через 4 минуты ![]() а что тут такого зафигачим dirname(dirname(dirname(__DIR__))) вместо dirname(__DIR__, 3)
0
|
||||
|
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,834
|
|
| 10.10.2020, 17:59 | |
|
Verolomstvo, Меня относительные пути больше пугают. Потому что люблю перемещать файлы с классами то в одну папку, то в другую. От этого не должен страдать код.
0
|
|
|
1308 / 1000 / 232
Регистрация: 01.10.2018
Сообщений: 3,893
|
|||
| 10.10.2020, 18:06 | |||
|
Добавлено через 4 минуты
0
|
|||
|
Заблокирован
|
|||||||
| 10.10.2020, 18:11 | |||||||
|
estic,
мы в папке public, файл index.php
![]() если структура папка папка public vendor то путь ВЕЗДЕ МОЖНО ПИСАТЬ не require_once dirname(__DIR__) . '/папка', а просто require_once 'папка' Добавлено через 4 минуты
0
|
|||||||
|
1308 / 1000 / 232
Регистрация: 01.10.2018
Сообщений: 3,893
|
|
| 10.10.2020, 18:18 | |
|
Verolomstvo, я вам уже один раз про chdir для 'vendor/autoload' и т.п. написал. Оставьте рабочий каталог для обрабатываемых файлов. Если не можете обойтись без относительных путей для программных файлов, используйте include_path (set_include_path). Другие могут.
0
|
|
|
Заблокирован
|
|
| 10.10.2020, 18:19 | |
|
0
|
|
|
1308 / 1000 / 232
Регистрация: 01.10.2018
Сообщений: 3,893
|
||
| 10.10.2020, 18:28 | ||
Мне, например, очень весело наблюдать за вашими в подавляющем большинстве случаем необоснованными претензиями
0
|
||
|
Заблокирован
|
||||||||||||||||||
| 10.10.2020, 18:38 | ||||||||||||||||||
![]() но нам этого мало
![]()
ещё для крутизны можно __DIR__ переопределить
0
|
||||||||||||||||||
|
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
|
||||
| 10.10.2020, 21:05 | ||||
|
Т.е. описанные вами неудобства относятся только к стандартному механизму сессий. Если эти неудобства для вас критичны - используйте другой механизм. Например, Laravel может хранить тексты ошибок валидации в сессиях, чтобы они сохранялись после редиректа (юзер заполняет форму с ошибками - ошибки сохраняются в сессию - юзер редиректится на ту же форму методом GET - ошибки берутся из сессии и отображаются). Если ошибок много, в куках может не хватить места на их хранение. Особенно если вместе с ошибками там хранится корзина и другие параметры. Другой пример - корзина неавторизованного пользователя. Можно, конечно, написать свою реализацию её хранения, но работать это будет по тому же принципу, как работают сессии. Или когда юзер заполняет форму (Имя, Логин и т.п.), затем уходит со страницы с формой и через какое-то время возвращается, можно взять из сессии введённые им ранее данные и подставить на текущую страницу. Хранить такие данные в куках считается небезопасным, а вот в сессиях - без проблем. Добавлено через 17 минут Я как-то здесь дискутировал с кем-то, кто считал, что в никах пользователей не должно быть спецсимволов. Какой-то цифровой фашизм. Но на своём личном сайте, безусловно, вы можете делать что угодно.
0
|
||||
|
166 / 90 / 38
Регистрация: 29.06.2015
Сообщений: 1,100
|
|||
| 11.10.2020, 15:25 [ТС] | |||
|
На практике корзина неавторизованного пользователя реализуется через сессии. Пользователь может добавить товар в корзину, пойти на другой сайт и сравнить цены, решить что покупать тут ему не надо. А потом передумать и вернуться - а сессия уже истекла и в корзине пусто. Реальный пример из жизни. И это раздражает. Меня, как пользователя, раздражает когда я добавил интересующие товары в корзину, чтобы их не потерять и отслеживать их цены. И сделал это на нескольких сайтах. Обдумываю где купить или банально жду зарплату ) А на одном из сайтов сессия истекла и корзина опустела. И я снова ищу эти товары на сайте и добавляю их в корзину. Или ухожу с этого сайта. Сайт потерял потенциального покупателя из за сессии.
0
|
|||
|
1152 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
|
||
| 11.10.2020, 15:45 | ||
|
1
|
||
|
Заблокирован
|
||
| 11.10.2020, 15:56 | ||
|
Добавлено через 4 минуты useruser, у сессии есть такой вот плюс: если курлом бот долбит страницу, на которой есть session_start() и ТУПО стоит проверка SID при отправке запроса, то курл не сможет её заспамить, то есть отправить запрос на возврат заголовков, взять оттуда SID и отправить с этим SID запрос не получится, так как при каждом curl_exec на той стороне будет новый SID для курла
0
|
||
| 11.10.2020, 15:56 | |
|
Помогаю со студенческими работами здесь
80
Зачем это используют зачем используют 2 read!!! Зачем используют конструкцию !()
Зачем используют сегментные регистры в Windows Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет
значение производной при заданном х
Логарифм записывается как: (x-2)log(x^2+2) -. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|