Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 会话变量don';不要每页都更新_Php_Session_Session Variables - Fatal编程技术网

Php 会话变量don';不要每页都更新

Php 会话变量don';不要每页都更新,php,session,session-variables,Php,Session,Session Variables,在我的网站上,有一个登录和注销的功能。登录时,我设置会话变量pass(散列密码)、uid(登录用户的ID)和loggedIn(布尔值): 在每个页面上,我都会检查访问者是否通过登录 正在检查$\u会话['loggedIn']的状态 在数据库中搜索ID为$\u SESSION['uid']的用户 检查数据库中的哈希密码是否与会话变量中的哈希密码匹配: $sespass = $_SESSION['pass']; $sesid = $_SESSION['uid']; $sql2 = "SELECT

在我的网站上,有一个登录和注销的功能。登录时,我设置会话变量pass(散列密码)、uid(登录用户的ID)和loggedIn(布尔值):

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

  • 正在检查
    $\u会话['loggedIn']
    的状态
  • 在数据库中搜索ID为
    $\u SESSION['uid']
    的用户
  • 检查数据库中的哈希密码是否与会话变量中的哈希密码匹配:

    $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_转储密码变量和userOk状态,这就是我注意到的一些有趣的地方。当我注销时,根据
    index.php?msg=loggedout
    上显示的内容,密码变量设置为空,
    $userOk
    false
    。但是,当我删除
    ?msg=loggedout
    (并且只保留
    index.php
    )时,密码变量将返回到它们以前的值,并且我不再注销。。。重新加载几次后,我再次注销

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


    如果您需要更多信息,请告诉我。

    每个站点都有初始化
    会话启动()


    session\u start()
    根据通过GET或POST请求传递的会话标识符或通过cookie传递的会话标识符创建会话或恢复当前会话

    联系我的主机提供商后,这实际上是一个主机问题。现在解决了

    谢谢,

    Jacob

    您的代码只存在一些问题。。。与我们分享整个页面在将id或会话插入dbwhere的
    session\u start()
    之前始终使用trim()是一个很好的做法,它在这些文件中,而不是我在这里发布的内容中@Codegodie我知道你还不能写评论,但这太短了,不能作为答案。用更多细节重写您的答案,并解释为什么需要
    会话\u start
    。是的,我在每页上都使用会话\u start()。
    $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;
    }