php中的会话仅在同一页面上有效,但在同一网站上的其他页面上无效

时间:2019-03-27 15:17:39

标签: php session

我有两个简单的页面(test.php,test2.php)。

test.php

<?php
session_start();
$_SESSION['username'] = "wria";
echo '<a href = "test2.php">click to another page</a> <br>';

if($_SESSION['username']) {
echo $_SESSION['username'];
}
?>

test2.php

<?php
session_start();
var_dump($_SESSION);
if($_SESSION['username']) {
echo $_SESSION['username'];
}
?>
在输出中,

刷新后打开 test.php enter image description here

但是当我转到 test2.php 时,将显示输出:

enter image description here

什么都没显示。

注意:此文件位于真实主机上,而不是本地主机上。

4 个答案:

答案 0 :(得分:1)

我认为问题出在您的服务器配置上。您是否在本地环境中尝试过?以下是一些步骤来帮助您调试来自PHP session lost after redirect

的问题
  

首先,请执行以下常规检查:

     
      
  1. 确保session_start();在任何会话被调用之前被调用。因此,安全的选择是将其放在页面开头,即打开后立即   
  2. 头重定向后,使用exit()结束当前脚本; (其他人也建议使用session_write_close();和session_regenerate_id(true),您也可以尝试使用,但我会使用exit();)
  3.   
  4. 确保在用于测试它的浏览器中启用了cookie。
  5.   
  6. 确保register_globals处于关闭状态,您可以在php.ini文件上并使用phpinfo()进行检查。
  7.   
  8. 确保您没有删除或清空会话
  9.   
  10. 确保$ _SESSION超全局数组中的键不会在任何地方被覆盖
  11.   
  12. 确保您重定向到同一域。因此,从www.yourdomain.com重定向到yourdomain.com不会继续进行会话。
  13.   
  14. 确保您的文件扩展名为.php(确实如此!)
  15.   

您可能还必须配置一个session_save_path,就像我链接的帖子中所说的那样。

答案 1 :(得分:1)

如果添加此代码: error_reporting(E_ALL); ini_set('display_errors',1); 在test2.php的顶部,您将看到错误。 如果看到(没有这样的文件或目录),则表明您保存的会话不可用,您可以将其更改为另一个位置。 或者可能您没有该会话将保存在其上的文件夹的权限。

答案 2 :(得分:1)

您保存会话的路径不可用。您必须将其更改为可用的位置。 您可以在php.ini中更改

答案 3 :(得分:0)

很可能您不会以任何方式保留会话ID,并且每次都会打开新会话。

请看看https://www.php.net/manual/en/session.idpassing.php

有几种方法可以使用Cookie,GET参数等“解决”它。