繁体   English   中英

会话变量未设置

[英]Session variable not staying set

警告:不是重复的,我找不到此问题。

我正在本地主机上测试和构建我的网站。 我的登录页面上有以下代码,如果用户具有用户ID cookie,并且用户的IP与cookie所显示的IP地址相同,则将用户发送到其个人资料页面。

if($_COOKIE["IPcookie"] == $_SERVER['REMOTE_ADDR']) {
    $cookieresult = mysqli_query($connection, 'SELECT COUNT(`ID`) AS count FROM users WHERE username="$_COOKIE["usercookie"]" AND `active`="1"');
    if($cookieresult == 0) {
        $loginquery = mysqli_query($connection, "SELECT * FROM users WHERE username=" .$_COOKIE['usercookie']);
        $row5 = mysqli_fetch_assoc($loginquery);
        $dbIDlogin = $row5['ID']; 
        $_SESSION['userID'] = $dbIDlogin;
        header('Location: /userprofile.php');
    }

但是,当我使用这些cookie进入用户个人资料时, $_SESSION['userID']有时为NULL 我似乎无法弄清楚为什么有时$_SESSION变为NULL 我似乎找不到任何图案。 我登录一个用户,单击他们的个人资料页面上所有指向网站不同区域的链接,然后返回到loginuser.php (上面显示的文件),它loginuser.php一个用户有效,而对另一个用户无效。 这似乎是完全随机的,这使我感到困惑。 我想不出它会在用户之间发生变化的任何原因。 我将继续进行测试,看看是否可以找到一种模式,但是已经投入了几个小时,它似乎完全是随机的。

这些问题似乎都无法解决我的问题:

在localhost上使用WAMPserver 2.0进行页面加载之间的PHP SESSION数据丢失 -我检查了php.ini,它具有这些代码行(尽管是一个不同但功能正常的tmp文件)。 所选答案中测试$ _SESSION变量的示例代码的工作原理像一个超级按钮。 我的代码不是。

PHP会话未保存我的session_save_path()可写。

页面之间未保存PHP会话PHP会话未保存 数据我在localhost而不是服务器上。

session_start(); 在每个页面上,不包括仅在具有session_start();页面中引用的模板session_start(); 在开始时(因为如果session_start();在模板中,则它会提示有关如何启动会话的错误)。

更新:我可能有一个模式。 用户名包括字母的用户不会保存其信息。 所有这些用户还具有更长的用户名,因为他们的用户名是“ dummy”和“ eport”之类的单词,而不是“ 1”和“ 9”。 它适用于1和9,但不适用于虚拟人和eport。 现在,这没有任何意义,因为它们都是由始终为数字的ID标识的,但这似乎是一种模式。

更新(来自userprofile.php的相关代码):

<?php

$userID = $_SESSION['userID'];
var_dump($_SESSION['userID']);


//get.
$totalquery = mysqli_query($connection, "SELECT * FROM users WHERE ID='$userID'");
$arrayquery = mysqli_fetch_assoc($totalquery);
$username = $arrayquery['username'];

//Firstname
$firstname = $arrayquery['firstname'];
echo 'Welcome ' .  $firstname;
//Lastname

?>

这段代码基本上不执行任何操作:

$cookieresult = mysqli_query($connection, 'SELECT COUNT(`ID`) AS count FROM users WHERE username="$_COOKIE["usercookie"]" AND `active`="1"');

由于$ cookieresult恰好在查询实际失败时大致等于0 (实际上为false )。 我猜测您真正需要做的是从结果资源句柄中实际读取数据,该结果资源句柄已设置为$cookieresult以确定您的count(ID)值。

这是代码的答案,如果将来有人需要或有兴趣的话。 我不确定所有代码在原始代码中的作用,回想起来,我可能应该研究更多的SQL语法。 谢谢您的帮助,迈克。

if(isset($_COOKIE["usercookie"])) {
    if(isset($_COOKIE["IPcookie"])) {
        echo('Cookie detected, processing, wait a second.');
        if($_COOKIE["IPcookie"] == $_SERVER['REMOTE_ADDR']) {
            $cookieusername = $_COOKIE["usercookie"];
            $cookieresult = mysqli_query($connection, "SELECT * FROM users WHERE username='$cookieusername' AND active=1");

            if(!$cookieresult or mysqli_num_rows($cookieresult) == 0) {
                echo('We really don\'t believe your cookie is real, sorry.');           
            }
            else {
                $loginquery = mysqli_query($connection, "SELECT * FROM users WHERE username='$cookieusername'");
                $row5 = mysqli_fetch_assoc($loginquery);
                $dbIDlogin = $row5['ID']; 
                $_SESSION['userID'] = $dbIDlogin;
                session_write_close();
                header('Location: /userprofile.php');
            }   
        }   
        else {
            echo('We don\'t currently believe your cookie is real, sorry.');

        }
    }
    else {
        echo('We don\'t believe your cookie is real, sorry.');

    }
}

检查是否输入if语句。 如果不是,请检查php.ini中的“ output_buffering”是否设置为“ ON”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM