Я тестирую выполнение проверки безопасности на своих сеансах PHP. Я могу успешно определить, был ли сеанс запущен с другого IP-адреса, и я могу успешно начать новый сеанс. Однако данные из старого сеанса копируются в новый! Как я могу начать пустой сеанс, сохраняя предыдущие данные сеанса для своего законного владельца?
Это мой код до сих пор после множества неудачных попыток:
<?php
// Security check
if( isset($_SESSION['ip_address']) && $_SERVER['REMOTE_ADDR']!=$_SESSION['ip_address'] ){
// Check failed: we'll start a brand new session
session_regenerate_id(FALSE);
$tmp = session_id();
session_write_close();
unset($_SESSION);
session_id($tmp);
session_start();
}
// First time here
if( !isset($_SESSION['ip_address']) ){
$_SESSION['ip_address'] = $_SERVER['REMOTE_ADDR'];
$_SESSION['start_date'] = new DateTime;
}
Официальная документация о сеансах ужасно запутанна: (
Обновление: Я публикую некоторые выводы, которые я получил через пробную версию и ошибку. Кажется, они работают:
<?php
// Load the session that we will eventually discard
session_start();
// We can only generate a new ID from an open session
session_regenerate_id();
// We store the ID because it gets lost when closing the session
$tmp = session_id();
// Close session (doesn't destroy data: $_SESSION and file remains)
session_destroy();
// Set new ID for the next session
session_id($tmp);
unset($tmp);
// Start session (uses new ID, removes values from $_SESSION and loads the new ones if applicable)
session_start();