Когда я выполняю вызов AJAX, мне нужно дождаться его ответа, чтобы показать его пользователю.Обновить страницу во время вызова ajax уничтожает php-сессию
function update() {
if (HttpReq.readyState == 4) {
if (HttpReq.status == 200) {
var div = document.getElementById('divAjax');
div.innerHTML = HttpReq.responseText;
} else {
alert("Error: " + HttpReq.statusText);
}
}
}
HttpReq = new XMLHttpRequest();
HttpReq.onreadystatechange = update;
HttpReq.open('GET', 'some_url.php', true);
HttpReq.send(null);
Однако, если пользователь нажимает клавишу F5, чтобы обновить экран до этого ответа, я теряю $ _SESSION данные, то, что автоматически регистрирует пользователя из.
Это обычное поведение, или есть проблема с моим кодом? (Я использую безопасный сеансовый загрузчик, возможно, проблема там. Я могу опубликовать код, если это необходимо.)
Проблема не совсем в F5, это то, что происходит в некоторых особых обстоятельствах, это просто Простейший способ я нашел, чтобы воспроизвести поведение.
Код:
// index.php
ini_set('session.gc_maxlifetime', 3600);
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 100);
session_save_path('/var/www/html/plantas/sessions');
sec_session_start(); // this line called in every other .php file
// functions.php
function sec_session_start() {
$session_name = 'sec_session_id'; // Set a custom session name
$secure = SECURE;
// This stops JavaScript being able to access the session id.
$httponly = true;
// Forces sessions to only use cookies.
if (ini_set('session.use_only_cookies', 1) === FALSE) {
header("Location: ../html/plantas/error.php?err=Could not initiate a safe session (ini_set)");
exit();
}
// Gets current cookies params.
$cookieParams = session_get_cookie_params();
session_set_cookie_params($cookieParams["lifetime"],
$cookieParams["path"],
$cookieParams["domain"],
$secure,
$httponly);
// Sets the session name to the one set above.
session_name($session_name);
session_start(); // Start the PHP session
session_regenerate_id(true);
}
// every other .php file begin with
include_once '../../includes/db_connect.php';
include_once '../../includes/functions.php';
sec_session_start();
РЕШЕНИЕ
сократить
session_regenerate_id(true);
из functions.php и вставить его после
// index.php
ini_set('session.gc_maxlifetime', 3600);
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 100);
session_save_path('/var/www/html/plantas/sessions');
sec_session_start(); // this line called in every other .php file
Да, лучше показать весь задействованный код. –
some_url.php проверить, что находится внутри этого запроса –
в обычной сессии сценария закрывается только при закрытии браузера, если у вас нет проверок для кнопки «Назад» и обновления, что, похоже, не с тобой. так что да, совместное использование кода поможет. – akmsharma