【问题标题】:PHP Sessions TroubleshootingPHP 会话故障排除
【发布时间】:2018-04-10 08:34:55
【问题描述】:

这里有很多关于 PHP 会话的问题,但似乎没有一个解决方案对我有用。我制作了一个测试脚本来展示这个问题:

session1.php

session_start();

$_SESSION['user'] = 'Test';

header('location: session2.php');
exit;
?>

session2.php

session_start();

print_r($_SESSION);

?>

这是一个非常简单的示例,但是我在我的站点中使用会话来依赖用户是否登录。它工作了一段时间,然后我不得不重新安装我的服务器,它就停止了工作。作为参考,这是我使用的问题,其中有很多可能的解决方案: Session variables not working php

这是我目前尝试过的

  • exit; 放在标头重定向之后
  • 重定向到同一个域,我也尝试将整个 url 放入重定向中,但没有成功。此外,如果您只是输入文件名,它应该会自动执行此操作(根据我的经验)
  • php.ini 中将session.save_path 设置为"/var/lib/php/session"
  • 确保脚本所有者 (root) 的完全读/写访问权限,同时确保 root 是所有者 ls -ld /var/lib/php/session返回

drwxrwxrwx. 2 root apache 4096 Apr 9 16:55 /var/lib/php/session

  • session.cookie_lifetime 设置为3600,没有必要,但我可以试试
  • 再次将session.cookie_domain 更改为我的域,这应该没有必要,因为默认情况下它会正确执行此操作

到目前为止,这些都不适合我。我希望我忽略了一些简单的事情。

如您所见,$_SESSIONsession2.php 中完全为空。 顺便说一句,我在更改 php.ini 后重新启动了 apache :)

【问题讨论】:

  • 你有没有试过使用function_exists()函数session_start()是否存在?
  • 检查你的session_save_path(),对我来说是/var/lib/php5/,需要有777 chmod 权限。
  • 检查php.net/manual/en/function.session-start.php esp。关于返回值和php版本之间的差异
  • /var/log/apache2/error.log(或站点的​​日志文件,如果不同)中的任何错误?
  • @KarstenKoop 哇,这实际上是一个很棒的建议。我的日志文件位于/var/lib/httpd/domains/....。最后几行是Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/home/admin/tmp) in Unknown on line 0。我个人认为这很奇怪,有人知道这是否是某种硬编码的默认会话目录吗? /var/lib/php/sessions 中还有其他会话,这才是真正令人困惑的地方。我将相应地设置 session.save_path 并更改权限。

标签: php session session-variables


【解决方案1】:

好的,我知道了!谢谢大家的建议,原来我需要学习阅读错误日志...

我使用vestacp,显然它将PHP 会话默认为/home/admin/tmp,我不确定如何更改,但您无法更改(我这样做了)。但是还有另一个问题,该文件夹的所有权和权限不正确。结果我只需要chmod -R 700 /home/admin/tmpchown -R root /home/admin/tmp - 我已经在另一个文件夹上尝试过,但它不允许这样做。

顺便说一句,这里是触发“哦,我怎么不能更改会话目录”的错误行:

Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/home/admin/tmp) in Unknown on line 0

【讨论】:

    【解决方案2】:

    session1.php

    session_start();
    
    $_SESSION['user'] = 'Test';
    
    header('location: session2.php');
    exit;
    ?>
    

    session2.php

    使用会话 $_SESSION['user'] 定义变量

    session_start();
    
    print_r($_SESSION['user']);
    
    ?>
    

    【讨论】:

    • $_SESSION 是包含所有会话变量的数组,$_SESSION[“user”] 只是该数组的一部分。它会给出相同的结果,为“null”
    猜你喜欢
    • 1970-01-01
    • 2015-10-08
    • 2010-12-12
    • 2012-09-28
    • 2012-11-10
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    • 2010-11-30
    相关资源
    最近更新 更多