php 第一次登录隐身/隐身窗口不设置会话或cookie

ddrv8njm  于 2023-03-07  发布在  PHP
关注(0)|答案(1)|浏览(118)

我还不完全确定这是否只影响匿名窗口或“新鲜”的正常浏览器窗口(但清除所有浏览器缓存不会重现这个问题)。
问题如下:
当我尝试登录我的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设置正确,但当我刷新页面或加载登录区域中的另一个页面时,它们再次为空。
如有任何帮助/建议,我们将不胜感激。

cbjzeqam

cbjzeqam1#

解决了这个问题:我正在加载的一些JavaScript也生成了一个带有PHPSESSID的cookie,从而覆盖了由session_start()创建的sessionID,并将我注销。2第二次,由JavaScript生成的sessionID仍然存在(因此session_start()不会创建新的),登录将正常工作,我将保持登录状态。
对于有类似问题的人的提示:检查开发人员工具中的PHPSESSID cookie。

相关问题