一尘不染

重定向后PHP会话丢失

php

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

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

更新资料

我找到了答案,我想将它发布在这里,以帮助遇到同样问题的任何人。


阅读 343

收藏
2020-05-26

共1个答案

一尘不染

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

  1. 确保session_start();在任何会话被调用之前被调用。因此,一个安全的选择就是将其放在页面的开头,紧接着在开始<?php声明之后,再放在其他任何地方。还要确保在打开<?php声明之前没有空格/制表符。
  2. 在后header重定向,使用结束当前的脚本exit();(其他人也建议session_write_close();,并session_regenerate_id(true),你可以尝试那些为好,但我会用exit();
  3. 确保在用于对其进行测试的浏览器中启用了cookie。
  4. 确保register_globals已关闭,您可以在php.ini文件上并使用进行检查phpinfo()。有关如何关闭它的信息,
  5. 确保您没有删除或清空会话
  6. 确保您的$_SESSION超全局数组中的密钥不会在任何地方被覆盖
  7. 确保您重定向到相同的域。因此,从重定向www.yourdomain.comyourdomain.com不会继续进行会话。
  8. 确保您的文件扩展名是.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”之前的位是您的主目录路径。当然,请确保该文件夹确实存在于您的根目录中。(某些程序在同步时不会上传空文件夹)

2020-05-26