Какая разница между 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он удалит старый связанный файл сеанса, иначе он останется в виде файла, но он будет пустым из всех данных сеанса.