会话变量不会在每个页面上更新

时间:2017-01-03 03:26:20

标签: php session session-variables

在我的网站上,有一个登录和注销功能。登录后,我设置会话变量传递(散列密码), 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");

在每个页面上,我都会检查访问者是否已登录

  1. 检查$_SESSION['loggedIn']
  2. 的状态
  3. 在数据库中搜索ID为$_SESSION['uid']
  4. 的用户
  5. 检查数据库中的散列密码是否与会话变量中的散列密码匹配:

    $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;
    }
    
  6. 我的问题是,这似乎适用于某些页面,而它在其他页面上不起作用。例如,当我登录时,我立即登录到主页,但不是登录到个人资料页面。但是,经过几次重新加载后,我也登录了个人资料页面。退出时会发生同样的事情。

    出于测试目的,我尝试在索引页面上var_dump密码变量以及userOk状态,这是我注意到有趣的地方。当我注销时,密码变量设置为空,$userOkfalse,根据index.php?msg=loggedout显示的内容。但是当我删除?msg=loggedout(并且只留下index.php)时,密码变量又恢复到之前的值,我不再注销了...重新加载后,我又一次退出。

    为什么我的会话变量无法按预期工作?感觉好像需要时间让他们更新,这很奇怪。我已尝试禁用缓存(通过标头和浏览器中的缓存设置)。

    告诉我你是否需要更多信息。

2 个答案:

答案 0 :(得分:0)

您在每个网站上都有初始化session_start()吗?

session_start()根据通过GET或POST请求传递的会话标识符创建会话或恢复当前会话,或通过cookie传递。

答案 1 :(得分:0)

与我的托管服务提供商联系后,实际上是托管问题。它现在已经解决了!

谢谢,
雅各布