重定向后 PHP 会话丢失

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

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

更新

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


答案 1

首先,执行这些常规检查:

  1. 确保在调用任何会话之前调用 。因此,一个安全的赌注是把它放在页面的开头,紧跟在开场宣言之后,然后再放在其他任何事情之前。还要确保在打开声明之前没有空格/制表符。session_start();<?php<?php
  2. 重定向后,使用(其他人也建议和)结束当前脚本,您也可以尝试这些脚本,但我会使用headerexit();session_write_close();session_regenerate_id(true)exit();)
  3. 确保在您用于测试它的浏览器中启用了 Cookie。
  4. 确保 已关闭,您可以在文件上检查此内容,也可以使用 .请参阅内容,了解如何将其关闭。register_globalsphp.iniphpinfo()
  5. 确保您没有删除或清空会话
  6. 确保超全局数组中的密钥未在任何地方被覆盖$_SESSION
  7. 请确保重定向到同一域。因此,从 a 重定向到不会将会话向前推进。www.yourdomain.comyourdomain.com
  8. 确保您的文件扩展名是(它发生了!.php

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

session_save_path('"your home directory path"/cgi-bin/tmp');
session_start();

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

<?php echo $_SERVER['SCRIPT_FILENAME']; ?>

“test.php”之前的位是您的主目录路径。当然,请确保该文件夹确实存在于根目录中。(某些程序在同步时不会上传空文件夹)


答案 2

您应该在标头调用后使用“退出”

header('Location: http://www.example.com/?blabla=blubb');
exit;

推荐