Какая разница между session_id($randomString)
и session_regenerate_id()
? Оба, похоже, меняют идентификатор сеанса:
session_regenerate_id () заменит текущий идентификатор сеанса на новый и сохранит текущую информацию сеанса.
- Создать новый PDF из шаблона с PHP
- Предупреждение: session_start (): не удается отправить cookie сеанса - уже отправленные заголовки (вывод запущен в
- Когда или по каким причинам люди должны включить PHP Safemode ON / OFF?
- Многомерный массив PHP - по значению, затем по ключу?
- Закрытие вызова, присвоенное объекту напрямую
session_id () используется для получения или установки идентификатора сеанса для текущего сеанса.
Если я получу это правильно, session_regenerate_id()
создает новый файл сеанса и копирует данные с возможностью удаления старого файла; в то время как session_id($randomString)
просто изменяет идентификатор сеанса в существующем файле.
Если да, то каковы преимущества копирования файлов? Как лучше предотвратить предотвращение точки фиксации сессии?
Этот ответ или любой другой, который я нашел, не отвечает на мой вопрос.
Хорошо, поэтому я провел некоторое тестирование, чтобы найти различия в трех разных параметрах ( session_id($id)
после session_start()
, session_regenerate_id()
и session_regenerate_id(true)
). Это результат того, что на самом деле происходит:
Вызов функции идентификатора сеанса после того, как session_start изменит идентификатор сеанса. В конце загрузки страницы текущее содержимое сеанса будет записывать новый файл сеанса. Это также оставит старый файл сеанса, и он не будет изменен никакими изменениями. Однако session_id
не отправляет новый cookie сеанса . Это делается session_start
, даже когда session_id
вызывается перед session_start
. При загрузке следующей страницы старый идентификатор сеанса передается и загружается с теми же данными, что и начало загрузки последней страницы (новые изменения сеанса были сохранены в новом идентификаторе).
session_regenerate_id()
создаст и изменит идентификатор сеанса, перенесет сеанс в новый файл и отправит файл cookie. Передача true
в качестве аргумента также приведет к удалению старого файла сеанса, опустив аргумент, он оставит его.
Что касается фиксации сеанса, как session_id($id)
и session_regenerate_id()
самом деле будет хуже, поскольку вы создаете новые сеансы, оставляя при этом старые файлы сеансов для захвата. Единственный вариант, который может помочь при фиксации, – вызвать session_regenerate_id(true)
передав аргумент.
Функция session_id
просто изменит идентификатор сеанса и обновит файл cookie сеанса на клиенте. Функция session_regenerate_id
будет действовать как session_id
с дополнительной миграцией сеанса на сервере. Фактически, поскольку вы можете читать из документов функции session_id
, его нужно вызвать до функции session_start
, иначе это может привести к потере сеанса.
Пример :
условия:
Описание:
/tmp/sess_1234abc
. /tmp/sess_SESSID
в этом случае /tmp/sess_1234abc
) session_id
/tmp/sess_MyTestSession
но сеанс не был изменен session_id
поэтому остается /tmp/sess_1234abc
! Поэтому, если вы хотите предотвратить фиксацию сеанса, путь, безусловно, session_regenerate_id
в некотором смысле session_regenarate_id()
включает session_id()
внутренне.
session_id()
– это способ получить или установить идентификатор сеанса. Он не обрабатывает файлы сеансаsess_*
. Вы указываете его передsession_start
, чтобы указать идентификатор сеанса. Создание файловsession_start
и создание файлов сеанса – работаsession_start
позже.
С другой стороны
session_regenarate_id()
– это то, что не просто устанавливает идентификатор сеанса, а также получает ваши данные сеанса из старого файлаsess_*
и добавляет его в новый (со случайным идентификатором) и создает новыйcookie
. В зависимости от параметраdelete_old_session
вsession_regenarate_id()
если установлено значениеtrue
он удалит старый связанный файл сеанса, иначе он останется в виде файла, но он будет пустым из всех данных сеанса.