警告:不重复,我找不到这个问题。
我正在测试并在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
。我似乎无法弄清楚为什么“有时”$_SESSION
会NULL
。我似乎无法找到任何模式。我登录一个用户,点击其个人资料页面上所有链接到该网站不同区域的链接,然后返回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
?>
答案 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”