嗨今天我面临一个奇怪的问题 登录验证后,我将用户名存储在会话中,并将其重定向到其他页面。
验证页面。
if (mysql_num_rows($sqlQuery) == 1) {
session_start();
$_SESSION['username'] = $login;
print $_SESSION['username'];
header("Location: dialout.php");
}
。 在dialout.php上我试图打印像
这样的会话var_dump($_SESSION);
但它没有打印任何东西。
一些谷歌搜索我发现问题可能在于编写会话目录。
所以检查我写了一个脚本。
print session_save_path();
if (!is_writable(session_save_path())) {
echo 'Session path "'.session_save_path().'" is not writable for PHP!';
}
else{
echo "writable -------------";
}
从上面的脚本我可以写。
只是想知道为什么我无法访问dialout.php页面上的会话
答案 0 :(得分:1)
在“验证”页面中,以下代码应位于文件顶部,作为代码中的第一行。
session_start();
如果您想使用会话变量,它应该包含在每个页面中。
答案 1 :(得分:1)
首先,执行这些常规检查:
确保session_start();在任何会话出现之前调用 调用。所以一个安全的赌注就是把它放在你的开头 页面,在开幕后立即
标题重定向后,使用exit()结束当前脚本; (其他人也建议使用session_write_close();和 session_regenerate_id(true),你可以尝试那些,但我会用 出口();)
确保在您用于测试的浏览器中启用了Cookie 它就开始了。
确保register_globals已关闭,您可以在php.ini上查看 文件,也使用phpinfo()。请参阅如何 把它关掉。
确保您没有删除或清空会话
确保$ _SESSION超全局数组中的键不是 覆盖任何地方
确保您重定向到同一个域。所以从一个重定向 www.yourdomain.com到yourdomain.com不会召开会议 前进。
确保您的文件扩展名为.php(它会发生!)
都可以在这里找到:PHP session lost after redirect
答案 2 :(得分:0)
在dialout.php中调用session_start函数,以便访问会话变量,如下所示:
session_start();
var_dump($_SESSION);