2

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

我正在本地主机上测试和构建我的网站。我的登录页面上有以下代码,如果用户有用户 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. 我似乎无法弄清楚为什么“有时”$_SESSION会这样NULL。我似乎无法在其中找到任何模式。我登录一个用户,点击他们个人资料页面上的所有链接,这些链接转到网站的不同区域,然后返回loginuser.php(上面显示的文件),它适用于一个用户,但不适用于另一个用户。它似乎是完全随机的,这让我感到困惑。我想不出它会在用户之间改变的任何原因。我将继续对此进行测试,看看是否能找到一种模式,但已经投入了几个小时,它看起来完全是随机的。

我的问题似乎没有得到任何这些答案:

PHP SESSION 数据在 localhost 上使用 WAMPserver 2.0 的页面加载之间丢失 - 我检查了我的 php.ini,它有这些代码行(虽然不同,但可以正常工作的 tmp 文件)。所选答案中测试 $_SESSION 变量的示例代码就像一个魅力。我的代码,没有。

PHP Session not Saving Mysession_save_path()是可写的。

页面之间未保存 PHP 会话 PHP 会话数据未保存 我在本地主机上,而不是服务器上。

session_start();在每个页面上,不包括仅在session_start();开头的页面中引用的模板(因为如果session_start();在模板中,那么它会出现关于会话如何启动的错误)。

更新:我可能有一个模式。用户名包括字母的用户不会保存他们的信息。所有这些用户也有更长的用户名,因为他们的用户名是像“dummy”和“eport”这样的词,而不是“1”和“9”。它适用于 1 和 9,但不适用于 dummy 和 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

?>
4

3 回答 3

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)

于 2013-08-13T00:37:37.393 回答
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.');

    }
}
于 2013-08-13T01:10:25.477 回答
0

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

于 2013-08-13T01:32:29.793 回答