我还不完全确定这是否只影响匿名窗口或“新鲜”的正常浏览器窗口(但清除所有浏览器缓存不会重现这个问题)。
问题如下:
当我尝试登录我的PHP/HTML网站时,在一个匿名窗口中,看起来SESSION和COOKIES在我第一次登录时没有设置。当我输入用户名和密码时,我确实进入了“已登录”页面,但当我点击网站中的任何链接时,它会将我重定向到登录屏幕,并打印$_SESSION或$_COOKIE显示空值。第二次登录时,SESSION和COOKIE设置与平常一样。
然而,我不明白为什么这只发生在隐身/隐身标签...
我的登录流程如下:
index.php:
<?php session_start();
if(!isset($_SESSION["userID"]) && !isset($_COOKIE["userID"])){
include('login.php');
}
include('startup.php');
if(isset($user_data){
// Show login screen
} else {
// Show page with user logged in
}
?>
login.php:
<?php
if(!empty($_POST["username"]) && !empty($_POST["password"]) && $_POST["action"]=="login"){
// Here I check if the user exists and return $user_data and $user_found.
if($user_found==1){
$_SESSION["userID"]= $user_data["id"];
session_start();
setcookie("userID", $user_data["id"], time()+31536000);
$_COOKIE["userID"]= $user_data["id"];
} else {
// User not found error
}
}
?>
startup.php
<?php
if(isset($_COOKIE["userID"])){
$_SESSION["userID"]= $_COOKIE["userID"];
}
if(isset($_SESSION["userID"])){
// Get userdata from database
$user_data= mysqli_fetch_array( ... );
}
?>
我已经尝试了大量的调试(在登录流程的所有阶段打印$_POST、$_COOKIE和$_SESSION):在正常的浏览器窗口中一切正常(即使清除了所有缓存),在隐身/隐身窗口中,当我登录时,$_COOKIE和$_SESSION设置正确,但当我刷新页面或加载登录区域中的另一个页面时,它们再次为空。
如有任何帮助/建议,我们将不胜感激。
1条答案
按热度按时间cbjzeqam1#
解决了这个问题:我正在加载的一些JavaScript也生成了一个带有PHPSESSID的cookie,从而覆盖了由session_start()创建的sessionID,并将我注销。2第二次,由JavaScript生成的sessionID仍然存在(因此session_start()不会创建新的),登录将正常工作,我将保持登录状态。
对于有类似问题的人的提示:检查开发人员工具中的PHPSESSID cookie。