2016-08-06 2 views
2

Это очень конкретный вопрос, когда нужно позвонить session_regenerate_id(). Существует ли разница или риск безопасности между вызовом session_regenerate_id() до или после установки безопасного значения в сеансе.Восстановить идентификатор сеанса после или после установки безопасного значения

Перед установкой значения:

if ($login_success) { 

    session_regenerate_id(true); 
    $_SESSION['login_status'] = 'logged_in'; 

} 

Или после установки значения в сессии:

if ($login_success) { 

    $_SESSION['login_status'] = 'logged_in'; 
    session_regenerate_id(true); 

} 

ответ

2

Как это работает, session_regenerate_id() создаст и изменит идентификатор сеанса, перенесет сеанс в новый файл и отправит файл cookie. Передача true в качестве аргумента также удалит старый файл сеанса, опустив аргумент, он оставит его.

Таким образом, использовать ли вы

session_regenerate_id(true); 
$_SESSION['login_status'] = 'logged_in'; 

или

$_SESSION['login_status'] = 'logged_in'; 
session_regenerate_id(true); 

это одно и то же: информация переписывается в новый файл и печенье отправляется. Я бы советовал использовать true в качестве аргумента, хотя и всегда, чтобы избежать захвата старого сеанса.

+0

Ваш ответ совершенно правильный, и я благодарен за ввод, но он не стал актуальным вопросом. Чтобы избежать путаницы для других программистов, я изменил ответ. Каламбур не предназначен (я поддержал ваш ответ). – Nitin

1

Они фактически то же самое; информация сеанса фактически сохраняется только при вызове session_write_close() (или неявно, когда заканчивается скрипт). Таким образом, данные не будут сохраняться для старого идентификатора.

+0

Здравствуйте, @obe, можете ли вы подтвердить, что session_regenerate_id() неявно вызывает session_write_close() и session_start(), или мне нужно будет объединить восстановление, изменение значения, закрыть и начать сеанс, чтобы сохранить изменения напрямую? – Nitin

+1

@Nitin, это PHP, ваша транзакция скоро закончится и отправьте заголовки (cookie) клиенту. Итак, imo, не нужно закрывать и перезапускать сеанс после регенерации. –

Смежные вопросы