【问题标题】:Multiple session id generated for different page of same website in PHP在PHP中为同一网站的不同页面生成多个会话ID
【发布时间】:2014-10-28 23:32:06
【问题描述】:

PHP 无法跨登录页面和登录页面存储 $_SESSION 变量的值或索引。最初的问题是每个页面请求都会生成一个新的 SESSION ID。但是即使解决了这个问题,它也无法识别 $_SESSION 变量的值或索引。

登录页面代码

if(mysqli_num_rows($data) == 1)
{ 
    setcookie('user_id',$row['user_id'],time()+(60*60*24));
    setcookie('username',$row['username'],time()+(60*60*24));
    echo $row['user_id'];
    $name = $row['username'];
    if(!empty($_COOKIE['user_id'])&&!empty($_COOKIE['username']))
    header('Location: '."home.php",200);
    else
    {
        $_SESSION['user_id']=$row['user_id'];
        $_SESSION['username']= $name;
        header('Location: '."home.php",200);
    }
}

着陆页代码

<?php
session_start();
if (isset($_SESSION['PHPSESSID'])) {
    header('Location: '."index.php",200);
}
else{
   echo "Hello".$_SESSION["username"];
}
?>

PHP.ini 文件配置

session.use_cookies 开启 开启

session.use_only_cookies 开启开启

session.use_strict_mode 关 关

【问题讨论】:

  • 你的登录页面也有session_start()吗?
  • 使您的session_start(); 通用并使用include ''; 调用它为什么在登录页面中将$_SESSION['username'] 分配给$name
  • @andbeyond 是的 session_start() 也包含在登录页面中,作为页面中的第一件事。
  • @BrianS 好吧,当然我可以打电话给我的session_start();与include ''; 但这里的想法是,如果我这样做,我将不得不包含登录验证,我认为这将是登录页面上不必要的过载(因为它实际上是登录页面,所以在登录页面上验证这一点)。不过,如果这可以解决问题,那么我肯定会很好。

标签: php session


【解决方案1】:

如果您使用会话,请确保每个页面都有 session_start()。

如果您的示例脚本,在设置会话 user_id 和名称之前,请调用 session_start()。

然后在着陆页上,检查 if (isset($_SESSION['user_id'])) {

理想情况下,您应该在重定向之前检查 $_SESSION['user_id'] 的值格式是否正确。


仅供参考,您应该添加 die;在你的 header() 调用之后就行了。您需要在 header() 之后使用 die 来停止脚本的执行,以停止您的脚本。否则,你的脚本会一直执行到最后,会导致一些奇怪的结果。

【讨论】:

  • 尝试了您建议的所有方法。没有任何效果:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-25
  • 2023-04-11
  • 1970-01-01
相关资源
最近更新 更多