Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
 Аватар для useruser
166 / 90 / 38
Регистрация: 29.06.2015
Сообщений: 1,100

Зачем используют сессии?

09.10.2020, 20:20. Показов 4609. Ответов 85
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Достаточно долгое время занимаюсь веб технологиями и PHP и до сих пор не могу понять зачем (не как, а зачем) используют сессии.

Опишу механизм сессии упрощенно
При сессии пользователю ставится cookie с идентификатором сессии (для PHP - PHPSESSID).
Вся информация пользователя, которую надо сохранить, сохраняется в файлах на сервере.
И при обращении пользователя, сервер читает идентификатор (PHPSESSID) и ищет файлы ассоциированные с этим идентификатором.
Фактически сессия - это куки на сервере.

Механизм кук более простой.
Вся информация пользователя, которую надо сохранить, сохраняется в файлах на компьютере пользователя (в файлах, называемых cookie). И оттуда же читается.

В чем проблема
Проблема в том, что срок жизни сессии устанавливается на сервере.
В связи с этим возникает множество неудобств
1) По умолчанию он 24 минуты.
2) Не всегда есть доступ к php.ini. (Обычный хостинг)
3) Максимальный срок жизни сессии 24 часа.

Моя задача, как программиста сделать использование сайта максимально удобным. Да и как пользователь я хочу чтобы мне было комфортно работать в интернете.

Часто возникает ситуация, что я авторизовавшись работаю с сайтом. И после закрытия браузера (или через определенное время) моя авторизация пропадает.
Нужно вводить данные снова. Это не удобно.
С куками, таких проблем, разумеется нет.

Зачем используют сессии, когда есть куки? Куки удобнее, проще, универсальнее.
Не будет "автовыхода" с сайта. Человек сам решит когда ему выйти. Не нужно настраивать сервер. Данные каждого человека хранятся на его компьютере (в его куках). Сплошные преимущества.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.10.2020, 20:20
Ответы с готовыми решениями:

Зачем в PHP сессии?
Всем привет! Интересный вопрос, не правда ли?) Часто слышу такое мнение, что сессии нужны для контроля авторизованности пользователей....

Зачем нужны сессии?
Прочитав около 20 статей о сессиях, так и не понял для чего они нужны. На практике. Разрабатываю веб-проекты на php около 3-4 лет и...

Зачем используют Eclipse?
Здравствуйте. Прочел, что часто как IDE используют eclipse. Какие преимущества и недостатки в этом? Спасибо.

85
 Аватар для sad67man
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,823
09.10.2020, 20:59
useruser, Основное и принципиальное отличие в том, что куки хранятся в браузере, что не очень безопасно, а сессия на сервере.
Токен авторизации можно хранить как в сессии, так и в куках. Определяется галочкой "запомнить меня" при входе.
0
 Аватар для HotReboot
326 / 227 / 92
Регистрация: 22.04.2017
Сообщений: 1,136
09.10.2020, 21:37
useruser,
3) 2) Не всегда есть доступ к php.ini.
PHP
1
2
ini_set('session.gc_maxlifetime', $time);
ini_set('session.cookie_lifetime', $time);
0
 Аватар для sash23
563 / 410 / 259
Регистрация: 31.05.2016
Сообщений: 1,105
09.10.2020, 21:58
Большой массив данных в куку вы не сможете сохранить.
0
 Аватар для useruser
166 / 90 / 38
Регистрация: 29.06.2015
Сообщений: 1,100
09.10.2020, 22:12  [ТС]
Цитата Сообщение от sad67man Посмотреть сообщение
Основное и принципиальное отличие в том, что куки хранятся в браузере
На компьютере пользователя (для каждого браузера хранение организовано немного по разному). Особых проблем с безопасностью не вижу.
Что взять куки с компьютера, что взять куку PHPSESSID и получить все данные с сервера.
Не принципиально, особенно с учетом того что в куках обычно нет ничего интересного. Они "ключ" к данным. И этот ключ всегда на компьютере пользователя. А иначе он бы просто не получил доступ к своим данным на сервере.

Цитата Сообщение от sad67man Посмотреть сообщение
Токен авторизации можно хранить как в сессии, так и в куках.
Токен авторизации, как я знаю, может быть только в куках.
В куке PHPSESSID (или другое название при правке php.ini)- если реализуется механизм сессий.
В адресной строке (GET запрос www.somesite.ru&PHPSESSID=SecretPass). Такое уже редко встретишь
В любой сторонней куке, при реализации своего механизма авторизации (отказ от сессий, делаем на куке).

Преимуществ сессий пока не вижу.

Цитата Сообщение от HotReboot Посмотреть сообщение
ini_set('session.gc_maxlifetime', $time);
Да так можно. Но не всегда. Тут всё решает хостер.
Например, вы можете попробовать ini_set max_execution_time=0, но через 2 минуты ваш скрипт остановится.
(На стаке есть тема.) Хостеры ограничивают некоторые параметры.
Можно и через .htaccess - но если веб сервер будет Nginx, то разумеется это не сработает и наверно надо будет искать ещё решения.
Так зачем всё это, когда есть куки? Куки - и вы не зависите от параметров сервера.

Цитата Сообщение от sash23 Посмотреть сообщение
Большой массив данных в куку вы не сможете сохранить.
Для этого есть база данных. Кука - ключ к данным, токен авторизации, файл хранящий "минимальные" настройки.
0
321 / 189 / 78
Регистрация: 04.10.2016
Сообщений: 809
09.10.2020, 22:22
В 2к20 году юзать что то одно - это от лукавого. Сессия для сервера, куки для клиента. Тут нечего пояснять больше - основа веба.

Добавлено через 2 минуты
Учите матчасть

Добавлено через 4 минуты
Веб-хостинг это прошлый век. Сейчас вдс/впс сервер недорого стоит и доступны. На счёт хостеров - демагогия бессмысленная и ненужная
0
 Аватар для HotReboot
326 / 227 / 92
Регистрация: 22.04.2017
Сообщений: 1,136
09.10.2020, 22:37
useruser,
Цитата Сообщение от useruser Посмотреть сообщение
Цитата Сообщение от HotReboot Посмотреть сообщение
ini_set('session.gc_maxlifetime', $time);
Да так можно. Но не всегда. Тут всё решает хостер.
Достаточно изменить место хранение, что бы хостер не тёр tmp
PHP
1
ini_set('session.save_path'....
Кстати и гонять служебный трафик между клиентом и сервером так же не есть хорошо. Особенно во времена повального интернета на смартфонах.
0
 Аватар для useruser
166 / 90 / 38
Регистрация: 29.06.2015
Сообщений: 1,100
09.10.2020, 22:53  [ТС]
Цитата Сообщение от Fart83 Посмотреть сообщение
Сессия для сервера, куки для клиента.
Вы вообще о чем? Я даже кратко описал механизм работы. Если я что то не правильно описал - поправьте.
Цитата Сообщение от Fart83 Посмотреть сообщение
Учите матчасть
Разберитесь пожалуйста сами. Я считаю, что хорошо разбираюсь в этом вопросе.
Поэтому я и не спрашиваю как, а спрашиваю - зачем?

Цитата Сообщение от Fart83 Посмотреть сообщение
Веб-хостинг это прошлый век.
Это к хостерам, коих сейчас +100500. И все они предоставляют шаред хостинг.

Цитата Сообщение от HotReboot Посмотреть сообщение
Достаточно изменить место хранение, что бы хостер не тёр tmp
Можно. Но зачем? Зачем лишний код, настройка сервера. Да и хостер может запретить что угодно.
Да, такое редко - но зачем об этом думать? Какие преимущества у сессий?
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
09.10.2020, 22:55
Цитата Сообщение от useruser Посмотреть сообщение
Зачем используют сессии, когда есть куки?
Вопрос не совсем корректный, потому что такие понятия как "сессия" или "куки" находятся на разных уровнях. Сессия - абстракция в основе которой лежат куки. И то что в php называется механизмом сессий - просто конкретная реализация этой абстракции. Соответственно если для некоторой задачи стандартный механизм подходит - то почему бы им не воспользоваться, если нет то можно свой, явно используя для этой цели куки.
Нужно только понимать, что куки приходят от клиента, и доверять им нельзя, и например в них нельзя хранить такие данные как id пользователя и т.д, а какой-ниюудь трудноподбираемый токен - нормально
0
 Аватар для HotReboot
326 / 227 / 92
Регистрация: 22.04.2017
Сообщений: 1,136
09.10.2020, 23:03
useruser,
Цитата Сообщение от useruser Посмотреть сообщение
Цитата Сообщение от HotReboot Посмотреть сообщение
Достаточно изменить место хранение, что бы хостер не тёр tmp
Можно. Но зачем? Зачем лишний код, настройка сервера. Да и хостер может запретить что угодно.
Вам уже объяснили какие. Если вы сразу не поняли, то уже и не поймёте. А куки так же пользователь может запретить у себя.
P.S. И да - у себя в профиле уберите "безопасность". Хранить данные пользователя в куках есть абсолютное ламерство.
0
1306 / 998 / 232
Регистрация: 01.10.2018
Сообщений: 3,882
09.10.2020, 23:08
Цитата Сообщение от useruser Посмотреть сообщение
до сих пор не могу понять зачем (не как, а зачем) используют сессии
Обычный кеш на файлах с решенными проблемами синхронизации и т.п. Если вам это не нужно, не используйте. Есть еще более быстрые способы кеширования (что у нас работает быстрее, чем диск? ), которые можно использовать через тот же механизм сессий или минуя его.
0
 Аватар для useruser
166 / 90 / 38
Регистрация: 29.06.2015
Сообщений: 1,100
09.10.2020, 23:12  [ТС]
Цитата Сообщение от Jewbacabra Посмотреть сообщение
И то что в php называется механизмом сессий - просто конкретная реализация этой абстракции.
Я так и описал. Всё верно.
Я показал 2 механизма и говорю - смотрите с сессиями могут быть проблемы. Основная причина - срок жизни сессии.
Привел аргументы.

И на практике эта проблема есть. Вот прямо сейчас на сайте крупного магазина, где я залогинен, истекла сессия.
И мне снова пришлось авторизироваться.
Вы можете сказать - надо выполнить настройку сервера. Возможно. Но такое встречается довольно часто. Сессия истекает, вас разлогинивает. Так уж сложилось.

Цитата Сообщение от Jewbacabra Посмотреть сообщение
что куки приходят от клиента, и доверять им нельзя
Любой информации от пользователя доверять нельзя. Для этого и фильтруют данные (обычно регулярными выражениями/плейсхолдерами/форматированием и т.д. по крайней мере я так делаю).

На практике я не вижу преимущества сессии, только недостатки.
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
09.10.2020, 23:22
Цитата Сообщение от useruser Посмотреть сообщение
На практике я не вижу преимущества сессии, только недостатки.
Преимущества перед чем?
Цитата Сообщение от useruser Посмотреть сообщение
Любой информации от пользователя доверять нельзя. Для этого и фильтруют данные
Я не про это. Например, пришло в куках user_id=10. Такую куку подобрать не составит большого труда, и никакой фильтр не поможет. А если будет что-то такое token=BzKPzTl+R1dFwWjDzGtsX4DX1P/bXkhKHnVaHinl2CBzZkskclv0ErXofF+WAdAQcW7SorjPZIELsJf2lwMbtVK2rP0Wn/jSMkxUjZtrj4qndsWyog88TmrxKrZSiyVi/kNRAF0JqYXcL и так просто уже не подобрать
0
 Аватар для sad67man
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,823
09.10.2020, 23:30
Цитата Сообщение от useruser Посмотреть сообщение
И на практике эта проблема есть. Вот прямо сейчас на сайте крупного магазина, где я залогинен, истекла сессия.
Еще раз - вы можете хранить токен авторизации в куках. А при каждом запросе доставайте по токену текущего пользователя. Для каждого устройства можно генерировать свой уникальный токен. У каждого токена может быть свой срок действия. Получается у вас должна быть отдельная таблица в БД с токенами для авторизации.

Но учтите тот момент, что если пользователь заходит на сайт с чужого компьютера, то он захочет повысить свою безопасность, и чтоб токен хранился на сервере, а не на клиенте.
0
1306 / 998 / 232
Регистрация: 01.10.2018
Сообщений: 3,882
09.10.2020, 23:34
Цитата Сообщение от useruser Посмотреть сообщение
Особых проблем с безопасностью не вижу.
Что взять куки с компьютера, что взять куку PHPSESSID и получить все данные с сервера.
Ключ авторизации временный. Его можно в любой момент принудительно сбросить. Кроме того, кешировать можно в том числе и такие данные, которые вы не собираетесь выводить.
0
 Аватар для sad67man
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,823
09.10.2020, 23:39
В дополнение к моему посту выше. Можно еще добавить такой функционал, как "выйти из под всех устройств", удалив из БД все токены авторизации текущего пользователя.
0
 Аватар для useruser
166 / 90 / 38
Регистрация: 29.06.2015
Сообщений: 1,100
10.10.2020, 00:23  [ТС]
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Я не про это. Например, пришло в куках user_id=10.
Ну это совсем начальный уровень.

Цитата Сообщение от sad67man Посмотреть сообщение
Получается у вас должна быть отдельная таблица в БД с токенами для авторизации.
Вы привели пример реализации задачи.
У нас есть 1 пользователь, который входит с разных устройств. При удачной проверке логин/пароль, мы устанавливаем на устройстве куку.
В куке прописан токен. Этот же токен пишем в бд. При любом действии проверяем есть ли токен у пользователя, есть ли такой в бд. Если есть - идентифицируем пользователя.
Реализация задачи на токенах.

А что с сессиями?
Как в данном примере сессия даст преимущество?

Цитата Сообщение от estic Посмотреть сообщение
Ключ авторизации временный.
И что из этого? Сессия истекла - пользователю надо заново залогиниться. Это не удобно.

Можно сказать - что если злоумышленник захватит устройство, то он сможет на нем работать 24 минуты (стандартное время сессии).
В то время как с кукой - постоянно (то что срок жизни он продлит даже не обсуждаем).
Но можно легко реализовать механизм "выйти из под всех устройств". Что часто и делается во многих проектах.
Все эти вопросы безопасности уже давно решены двухэтапной аутентификацией.
0
 Аватар для sad67man
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,823
10.10.2020, 00:39
Цитата Сообщение от useruser Посмотреть сообщение
ожно сказать - что если злоумышленник захватит устройство, то он сможет на нем работать 24 минуты (стандартное время сессии).
Тут еще нужно учитывать, что сессия должна быть открытой. Если не видите смысла - то скорее всего в вашем случае оно и не нужно.

А что если это не какой-то простой сайт, а какой-нибудь банк-онлайн? Вот вы заходите с чужого браузера посмотреть свои счета. Вы сами как пользователь, где бы захотели, чтоб хранился ваш токен?
0
Невнимательный
 Аватар для ft4l
3107 / 1277 / 358
Регистрация: 08.02.2013
Сообщений: 7,453
Записей в блоге: 2
10.10.2020, 00:58
Цитата Сообщение от useruser Посмотреть сообщение
В куке прописан токен. Этот же токен пишем в бд. При любом действии проверяем есть ли токен у пользователя, есть ли такой в бд. Если есть - идентифицируем пользователя.
Вы описываете сессии, но не встроенные в php (которые на файлах), а реализуемые непосредственно в скриптах и на бд-таблицах.
И похожее на то что только для авторизованых.

PHP-cессии отличаются немного другим подходом.
Например посмотрите в комментариях к странице
https://www.php.net/manual/ru/... andler.php
Есть так-же реализация на db-таблицах.
Стартовать-ли сессии только для авторизовных,
разлогинивать-ли через какое-то время,
что именно держать в сессии ...
можно так-же решить в скриптах.

Но нужны-ли все эти встроенные механизмы или Вам достааточно одной постоянной таблицы users,
как-бы уже дело выбора.
Если Вы как-то отслеживаете действия юзеров и где-то храните на сервере какие-то временные данные,
то это сессия.
... Но не обязательно используется встроенные механизмы.

А то что получаете с клиента, может оказаться чем-угодно,
и это однозначно куча лишнего кода, проверять эти данные, фильтровать ...
0
Заблокирован
10.10.2020, 13:09
Цитата Сообщение от sad67man Посмотреть сообщение
В дополнение к моему посту выше. Можно еще добавить такой функционал, как "выйти из под всех устройств", удалив из БД все токены авторизации текущего пользователя.
не надо ничего удалять из БД)))
надо при входе на другом устройстве вносить в БД токен ЭТОГО ДРУГОГО устройства, а при проверке совпадения сессионного токена с токеном из БД делать разлогин на устройстве, где он не совпал, оставляя ВСЕГДА только ОДНО залогиненное устройство)))
всё намного проще: в ларавеле видимо целая отдельная таблица для этого создана? )))
нужен один столбец для этого
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.10.2020, 13:09
Помогаю со студенческими работами здесь

Зачем это используют
Хотел бы узнать зачем используют вот такую работу с памятью в SQL запросах Connection* iconn = SQLPool.GetConnection(); ...

зачем используют 2 read!!!
вот часть кода! begin read(f,i); read(f,i); readtable(t,e1,i); read(f,i); y:=getz(f,t); e1.inf:=e1.inf-y; ...

Зачем используют конструкцию !()
например var isFirefox = ! ! ( navigator . vendor && navigator . vendorSub ) ; зачем !! - отрицание отрицания... мы таким образом...

Зачем придумали и используют массивы?
Здравствуйте , уважаемые члены форума ! У меня глупый вопрос , зачем придумали и используют массивы ?

Зачем используют сегментные регистры в Windows
Вот например кусок кода: .data? CurrDir db MAX_PATH dup (?) buff db 4 * 3 dup (?) .code start:


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru