Session 变量不会在每个页面上更新
Session variables don't update on every page
在我的网站上,有登录和退出的功能。登录后,我设置 session 变量 pass (哈希密码), uid 这是登录用户的 ID和 loggedIn(布尔值):
$hashedpass = **hashed pass**;
$_SESSION['pass'] = $hashedpass or die("Fel 2");
$_SESSION['uid'] = $uid or die("Fel 3");
$_SESSION['loggedIn'] = true or die("Fel 4");
header("Location:indexloggedin.php");
在每个页面上,我都会检查访问者是否通过
登录
- 正在检查
$_SESSION['loggedIn']
、 的状态
- 正在数据库中搜索 ID 为
$_SESSION['uid']
、 的用户
检查数据库中的散列密码是否与 session 变量中的散列密码相匹配:
$sespass = $_SESSION['pass'];
$sesid = $_SESSION['uid'];
$sql2 = "SELECT * FROM `users` WHERE `id` = '$sesid'";
$result2 = mysqli_query($db_conx, $sql2);
$numrows2 = mysqli_num_rows($result2);
if ($numrows2 != 1) {
$userOk = false;
}
while ($row = mysqli_fetch_array($result2,MYSQLI_ASSOC)) {
$dbpass = $row['pass'];
}
if ($sespass != $dbpass) {
$userOk = false;
} else {
$userOk = true;
}
我的问题是这似乎在某些页面上有效,而在其他页面上无效。例如,当我登录时,我立即登录到主页,而不是个人资料页面。但是,在重新加载几次之后,我也登录到了个人资料页面。注销时也会发生同样的事情。
出于测试目的,我尝试 var_dump 密码变量以及索引页面上的 userOk 状态,这是我注意到一些有趣的地方。当我注销时,密码变量设置为空,$userOk
是 false
,根据 index.php?msg=loggedout
处显示的内容。但是当我删除 ?msg=loggedout
(只保留 index.php
)时,密码变量又恢复到原来的值,我不再注销了......重新加载几次后,我又一次注销。
为什么我的 session 变量没有按预期工作?感觉好像他们更新需要时间,很奇怪。我尝试禁用缓存(通过 headers 和浏览器中的缓存设置)。
如果您需要更多信息,请告诉我。
您在每个站点上都进行了初始化 session_start()
?
session_start()
根据通过 GET 或 POST 请求或通过 cookie 传递的会话标识符创建会话或恢复当前会话。
联系我的托管服务提供商后,实际上是托管问题。现已解决!
谢谢,
雅各
在我的网站上,有登录和退出的功能。登录后,我设置 session 变量 pass (哈希密码), uid 这是登录用户的 ID和 loggedIn(布尔值):
$hashedpass = **hashed pass**;
$_SESSION['pass'] = $hashedpass or die("Fel 2");
$_SESSION['uid'] = $uid or die("Fel 3");
$_SESSION['loggedIn'] = true or die("Fel 4");
header("Location:indexloggedin.php");
在每个页面上,我都会检查访问者是否通过
登录- 正在检查
$_SESSION['loggedIn']
、 的状态
- 正在数据库中搜索 ID 为
$_SESSION['uid']
、 的用户
检查数据库中的散列密码是否与 session 变量中的散列密码相匹配:
$sespass = $_SESSION['pass']; $sesid = $_SESSION['uid']; $sql2 = "SELECT * FROM `users` WHERE `id` = '$sesid'"; $result2 = mysqli_query($db_conx, $sql2); $numrows2 = mysqli_num_rows($result2); if ($numrows2 != 1) { $userOk = false; } while ($row = mysqli_fetch_array($result2,MYSQLI_ASSOC)) { $dbpass = $row['pass']; } if ($sespass != $dbpass) { $userOk = false; } else { $userOk = true; }
我的问题是这似乎在某些页面上有效,而在其他页面上无效。例如,当我登录时,我立即登录到主页,而不是个人资料页面。但是,在重新加载几次之后,我也登录到了个人资料页面。注销时也会发生同样的事情。
出于测试目的,我尝试 var_dump 密码变量以及索引页面上的 userOk 状态,这是我注意到一些有趣的地方。当我注销时,密码变量设置为空,$userOk
是 false
,根据 index.php?msg=loggedout
处显示的内容。但是当我删除 ?msg=loggedout
(只保留 index.php
)时,密码变量又恢复到原来的值,我不再注销了......重新加载几次后,我又一次注销。
为什么我的 session 变量没有按预期工作?感觉好像他们更新需要时间,很奇怪。我尝试禁用缓存(通过 headers 和浏览器中的缓存设置)。
如果您需要更多信息,请告诉我。
您在每个站点上都进行了初始化 session_start()
?
session_start()
根据通过 GET 或 POST 请求或通过 cookie 传递的会话标识符创建会话或恢复当前会话。
联系我的托管服务提供商后,实际上是托管问题。现已解决!
谢谢,
雅各