会话变量没有保持设置

时间:2013-08-13 00:06:20

标签: php session

警告:不重复,我找不到这个问题。

我正在测试并在localhost上构建我的网站。我在登录页面上有以下代码,如果他们有用户ID cookie,则将用户发送到他们的个人资料页面,并且他们的IP与他们的Cookie应该是相同的。

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。我似乎无法弄清楚为什么“有时”$_SESSIONNULL。我似乎无法找到任何模式。我登录一个用户,点击其个人资料页面上所有链接到该网站不同区域的链接,然后返回loginuser.php(上面显示的文件),它适用于一个用户,但不是和另外一个。它似乎是完全随机的,这让我很困惑。我想不出它会在用户之间发生变化的任何原因。我将继续测试这个,看看我是否能找到一个模式,但已经有几个小时了,它看起来完全是随机的。

我的问题似乎没有得到任何回答:

PHP SESSION data lost between page loads with WAMPserver 2.0 on localhost - 我检查了我的php.ini,它有那些代码行(虽然是一个不同但功能正常的tmp文件)。测试$ _SESSION变量的选定答案中的示例代码就像一个魅力。我的代码,没有。

PHP Session not Saving 我的session_save_path()是可写的。

PHP session not being saved between pages PHP Session data not being saved 我在localhost,而不是服务器。

session_start();在每个页面上,不包括仅在开头有session_start();的网页中引用的模板(因为如果session_start();位于模板中,则会出现错误关于会话是如何开始的。)

更新:我可能有一个模式。具有用户名(包括字母)的用户不保存其信息。所有这些用户也有更长的用户名,因为他们的用户名是“dummy”和“eport”之类的词,而不是“1”和“9”。它适用于1和9,但不适用于虚拟和电子竞技。现在,这没有任何意义,因为它们都是由ID来识别的,这些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

?>

3 个答案:

答案 0 :(得分:3)

这段代码基本上什么都不做:

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

因为$ cookieresult在查询实际失败时只是松散地等于0(实际上它将是false)。我猜你真正需要做的是实际读取设置为$cookieresult的结果资源句柄中的数据,以确定count(ID)的值。

答案 1 :(得分:0)

以下是代码中的答案,如果有人将来需要它,或者感兴趣。我不确定所有代码在原始代码中做了什么,回头看,我可能应该研究更多的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.');

    }
}

答案 2 :(得分:0)

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