Для чего используются session_id, session_regenerate_id и session_name? - PullRequest
10 голосов
/ 23 июля 2010

хорошо, я новичок в сессиях, давайте представим, что у нас есть небольшой сайт входа,

вот логика

  1. Логин
  2. если пароль правильный = используйте $ _SESSION [isaloginuser] = 1
  3. проверить сессию, чтобы увидеть меню, если $ _SESSION [isaloginuser] = 1
  4. показать меню
  5. пользователь хочет выйти
  6. неустановленный сеанс
  7. уничтожить сессионную систему

что он использует

session_register
session_destroy
session_unset
session_start

куда входит session_id & session_regenerate или session_name? на сайте php написано

session_id () используется для получения или установки идентификатор сеанса для текущего сеанса.

Я все еще не понимаю, зачем они нам нужны? в реальной среде что это делает?

Ответы [ 5 ]

14 голосов
/ 23 июля 2010

Нет, вам не нужно их использовать.В общем, все, что вам нужно, это

  • session_start, чтобы начать обработку сеанса, и
  • session_destroy, чтобы уничтожить сохраненныйданные сеанса (это не изменяет $_SESSION) и
  • session_unset для сброса переменной $_SESSION (но вы также можете сделать $_SESSION = array()).

session_id и session_name предназначены для получения и установки идентификатора текущего сеанса и идентификатора сеанса (по умолчанию PHPSESSID).session_regenerate_id может использоваться для регенерации / изменения идентификатора сеанса текущего сеанса.Это может быть полезно, например, если вы хотите обновлять идентификатор сеанса каждые 10 минут или после изменения состояния подлинности пользователя, связанного с сеансом.

10 голосов
/ 23 июля 2010

session_regenerate_id() используется для предотвращения фиксации сессии.

Фиксация сеанса означает следующее: Вы посещаете веб-сайт и проверяете свой идентификатор сеанса. Затем вы заставляете другого пользователя посещать сайт с помощью идентификатора сеанса и входить в него. Теперь вы вошли в систему как этот пользователь и обладаете его привилегиями, поскольку вы оба используете один и тот же сеанс.

Чтобы предотвратить это, дайте пользователю новый идентификатор сеанса, используя session_regenerate_id(), когда он успешно войдет в систему. Теперь только у него есть идентификатор сеанса, а ваш старый идентификатор сеанса больше не действителен.

3 голосов
/ 23 июля 2010

session_register () устарела в 5.3, я бы рекомендовал не использовать.Вместо этого просто используйте

$_SESSION['varname'] = "value";

session_id, который он только что использовал, если вы хотите получить идентификатор сеанса для хранения в базе данных, это не «необходимо» для использования.session_name, просто устанавливает имя, это не обязательно.Если вы хотите создать новый идентификатор, это не нужно, если это не нужно вашему приложению, для сеанса входа в систему я очень сомневаюсь, что вы будете его использовать.

Остальные, я надеюсь, вы понимаете, что они делают (то есть сбрасывают / уничтожают).Но надеюсь, что это дает некоторое представление.

2 голосов
/ 23 июля 2010

Я обычно использую session_id () при создании корзин покупок, чтобы я мог отслеживать, что добавил этот пользователь, после того как я получил ответ от платежного шлюза о том, что платеж был успешным, я затем session_regenerate (), чтобы, когда онивернуться на мой сайт, их предыдущие корзины не видны, и я, как новый пользователь, "вошел" в магазин.

2 голосов
/ 23 июля 2010

Идентификаторы сеанса являются идентификатором сеанса.Сервер хранит данные о клиенте в файле cookie.Этот файл cookie отправляется с каждым HTTP-запросом на сервер этим клиентом.PHP устанавливает cookie как случайный строковый токен.Этот токен идентифицирует клиента и связывает его с набором пар ключ-значение.Идея переменной сеанса заключается в том, что файлы cookie могут быть легко изменены.Однако идентификаторы сеансов, являющиеся случайными строками, трудно дублировать, что повышает безопасность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...