gpt4 book ai didi

php - 重新加载部分页面时 session 会丢失

转载 作者:行者123 更新时间:2023-11-29 12:41:07 29 4
gpt4 key购买 nike

我遇到一个问题,由于与各种外部 API 的通信,我的某些页面需要较长时间才能加载。我注意到,当我更改到不同的页面或在完成加载之前重新加载当前页面时,它似乎会删除我的 session 并将我注销。

例如,如果加载页面 about.php,然后在 about.php 完全加载之前单击链接加载 profile.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 ID,特别是

session_regenerate_id();

如果您的网站加载页面速度非常慢,并且用户在您的页面上打开另一个链接,而第一页未完全加载,SESSION ID 将丢失,从而导致问题。

只需从 sec_session_start 函数中删除 session_regenerate_id(); 即可。

关于php - 重新加载部分页面时 session 会丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26109249/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com