У меня проблема, когда некоторые из моих страниц занимают длительный период загрузки из-за связи с различными внешними API. Я заметил, что, когда я перехожу на другую страницу или перезагружаю текущую страницу, прежде чем она закончит загрузку, она, похоже, уронит мой сеанс и выйдет из системы.Сессии теряются при перегрузке частичных страниц
Например, если вы загружаете страницу about.php, а затем я нажимаю ссылку для загрузки profile.php до того, как файл about.php полностью загружен, он выводит меня из системы и отбрасывает обратно на экран входа в систему.
Я не знаю, что искать, но не удалось найти информацию о подобных проблемах. Может ли кто-нибудь пролить свет на то, что будет причиной этого?
Верх каждой страницы:
sec_session_start();
if(login_check($dp_conn) == false)
{
header("location:../login.php?error=1");
}
sec_session_start функция():
function sec_session_start()
{
$session_name = 'sec_session_id'; // Set a custom session name
$secure = false; // Set to true if using https.
$httponly = true; // This stops javascript being able to access the session id.
ini_set('session.use_only_cookies', 1); // Forces sessions to only use cookies.
$cookieParams = session_get_cookie_params(); // Gets current cookies params.
session_set_cookie_params($cookieParams["lifetime"], $cookieParams["path"], $cookieParams["domain"], $secure, $httponly);
session_name($session_name); // Sets the session name to the one set above.
session_start(); // Start the php session
session_regenerate_id(); // regenerated the session, delete the old one.
}
login_check функция():
function login_check($db)
{
// Check if all session variables are set
if(isset($_SESSION['user_id'], $_SESSION['username'], $_SESSION['login_string']))
{
$user_id = $_SESSION['user_id'];
$login_string = $_SESSION['login_string'];
$username = $_SESSION['username'];
$user_browser = $_SERVER['HTTP_USER_AGENT']; // Get the user-agent string of the user.
$query = "SELECT password FROM users WHERE id = " . $user_id . " LIMIT 1";
$result = mysql_query($query, $db);
if (mysql_num_rows($result) == 1)
{
// If the user exists
$row = mysql_fetch_row($result);
$password = $row[0];
$login_check = hash('sha512', $password.$user_browser);
if($login_check == $login_string)
{
// Logged In!!!!
return true;
}
else
{
// Not logged in
return false;
}
}
else
{
// Not logged in
return false;
}
}
else
{
// Not logged in
return false;
}
}
Вы используете sec_session_start(), который, я думаю, воссоздает идентификатор сеанса, используя обычный session_start() – BojanT
Извините, что забыл включить код для этой функции. Он использует session_start(), только внутри функции, которая устанавливает другие параметры. – 2014-09-29 21:54:27
Как я уже сказал, session_regenerate_id() генерирует новый идентификатор сеанса, и что происходит, когда вы пытаетесь загрузить новую страницу, первая заканчивается и устанавливает новый идентификатор сеанса, а вторая страница уже отправила старый идентификатор сеанса, срок действия которого истек. Попробуйте комментировать '// session_regenerate_id();' – BojanT