首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >重定向后PHP会话丢失

重定向后PHP会话丢失
EN

Stack Overflow用户
提问于 2013-06-22 02:49:34
回答 38查看 227.9K关注 0票数 152

如何在PHP中解决重定向后丢失会话的问题?

最近,我遇到了一个非常常见的问题,即重定向后丢失会话。在搜索这个网站后,我仍然找不到解决方案(尽管this是最接近的)。

更新

我已经找到了答案,我想我应该把它贴在这里,以帮助任何遇到同样问题的人。

EN

回答 38

Stack Overflow用户

回答已采纳

发布于 2013-06-22 02:49:34

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

  1. 确保在调用任何会话之前调用session_start();。因此,一种安全的做法是将它放在页面的开头,紧跟在打开的<?php声明之后。还要确保在打开declaration.
  2. After <?php header重定向之前没有空格/制表符,使用exit();结束当前脚本(其他人也建议使用session_write_close();session_regenerate_id(true),你也可以尝试这些,但我会使用cookies确保在你用来测试它的浏览器中启用cookies。
  3. 确保register_globals关闭,你可以在php.ini文件上检查这一点,也可以使用phpinfo()。有关如何将其关闭的信息,请参阅this
  4. 确保您未删除或清空会话
  5. 确保您的$_SESSION超级全局数组中的密钥未被覆盖,并确保您重定向到相同的域。因此,从www.yourdomain.com重定向到yourdomain.com不会携带会话forward.
  6. Make确保您的文件扩展名为.php (这是真的!)

现在,这些是最常见的错误,但如果他们没有做到这一点,问题很可能与您的托管公司有关。如果一切都能在localhost上运行,但不能在远程/测试服务器上运行,那么这很可能是罪魁祸首。因此,请检查您的主机提供商的知识库(也可以尝试他们的论坛等)。对于像FatCow和iPage这样的公司,他们要求您指定session_save_path。所以就像这样:

代码语言:javascript
复制
session_save_path('"your home directory path"/cgi-bin/tmp');
session_start();

(将“您的主目录路径”替换为您的实际主目录路径。这通常位于您的控制面板(或等效目录)中,但您也可以在根目录下创建一个test.php文件,然后键入:

代码语言:javascript
复制
<?php echo $_SERVER['SCRIPT_FILENAME']; ?>

'test.php‘前面的一位是你的主目录路径。当然,要确保该文件夹确实存在于根目录中。(某些程序在同步时不上传空文件夹)

票数 230
EN

Stack Overflow用户

发布于 2015-06-02 20:48:35

你应该在header-call之后使用"exit“

代码语言:javascript
复制
header('Location: http://www.example.com/?blabla=blubb');
exit;
票数 27
EN

Stack Overflow用户

发布于 2015-04-01 05:12:01

我尝试了所有可能的解决方案,但没有一个对我有效!当然,我使用的是共享主机服务。

最后,我通过在重定向报头中使用“相对url”解决了这个问题!

代码语言:javascript
复制
header("location: http://example.com/index.php")

已使会话cookies无效

代码语言:javascript
复制
header("location: index.php")

像护身符一样工作!

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17242346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档