如何在PHP中解决重定向后丢失会话的问题?
最近,我遇到了一个非常常见的问题,即重定向后丢失会话。在搜索这个网站后,我仍然找不到解决方案(尽管this是最接近的)。
更新
我已经找到了答案,我想我应该把它贴在这里,以帮助任何遇到同样问题的人。
发布于 2013-06-22 02:49:34
首先,执行以下常规检查:
session_start();
。因此,一种安全的做法是将它放在页面的开头,紧跟在打开的<?php
声明之后。还要确保在打开declaration.<?php
header
重定向之前没有空格/制表符,使用exit();
结束当前脚本(其他人也建议使用session_write_close();
和session_regenerate_id(true)
,你也可以尝试这些,但我会使用cookies确保在你用来测试它的浏览器中启用cookies。register_globals
关闭,你可以在php.ini
文件上检查这一点,也可以使用phpinfo()
。有关如何将其关闭的信息,请参阅this。$_SESSION
超级全局数组中的密钥未被覆盖,并确保您重定向到相同的域。因此,从www.yourdomain.com
重定向到yourdomain.com
不会携带会话forward..php
(这是真的!)现在,这些是最常见的错误,但如果他们没有做到这一点,问题很可能与您的托管公司有关。如果一切都能在localhost
上运行,但不能在远程/测试服务器上运行,那么这很可能是罪魁祸首。因此,请检查您的主机提供商的知识库(也可以尝试他们的论坛等)。对于像FatCow和iPage这样的公司,他们要求您指定session_save_path
。所以就像这样:
session_save_path('"your home directory path"/cgi-bin/tmp');
session_start();
(将“您的主目录路径”替换为您的实际主目录路径。这通常位于您的控制面板(或等效目录)中,但您也可以在根目录下创建一个test.php
文件,然后键入:
<?php echo $_SERVER['SCRIPT_FILENAME']; ?>
'test.php‘前面的一位是你的主目录路径。当然,要确保该文件夹确实存在于根目录中。(某些程序在同步时不上传空文件夹)
发布于 2015-06-02 20:48:35
你应该在header-call之后使用"exit“
header('Location: http://www.example.com/?blabla=blubb');
exit;
发布于 2015-04-01 05:12:01
我尝试了所有可能的解决方案,但没有一个对我有效!当然,我使用的是共享主机服务。
最后,我通过在重定向报头中使用“相对url”解决了这个问题!
header("location: http://example.com/index.php")
已使会话cookies无效
header("location: index.php")
像护身符一样工作!
https://stackoverflow.com/questions/17242346
复制相似问题