我有两个简单的页面(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'];
}
?>
在输出中,
但是当我转到 test2.php 时,将显示输出:
什么都没显示。
注意:此文件位于真实主机上,而不是本地主机上。
答案 0 :(得分:1)
我认为问题出在您的服务器配置上。您是否在本地环境中尝试过?以下是一些步骤来帮助您调试来自PHP session lost after redirect
的问题首先,请执行以下常规检查:
- 确保session_start();在任何会话被调用之前被调用。因此,安全的选择是将其放在页面开头,即打开后立即
- 头重定向后,使用exit()结束当前脚本; (其他人也建议使用session_write_close();和session_regenerate_id(true),您也可以尝试使用,但我会使用exit();)
- 确保在用于测试它的浏览器中启用了cookie。
- 确保register_globals处于关闭状态,您可以在php.ini文件上并使用phpinfo()进行检查。
- 确保您没有删除或清空会话
- 确保$ _SESSION超全局数组中的键不会在任何地方被覆盖
- 确保您重定向到同一域。因此,从www.yourdomain.com重定向到yourdomain.com不会继续进行会话。
- 确保您的文件扩展名为.php(确实如此!)
您可能还必须配置一个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参数等“解决”它。