繁体   English   中英

PHP会话不在同一页面中工作

[英]PHP session not working in the same page

<?php
    session_start();

    echo "BEFORE set::: " . $_SESSION['test'];         // should say 'Hello' AFTER page refresh
    echo "<pre>"; print_r($_SESSION); echo "</pre>";  // should show array AFTER page refresh

    $_SESSION['test'] = 'Hello';                       // setting session variable 'test'
    echo "<br />";

    echo "AFTER set::: " . $_SESSION['test'];          // says 'hello' at all times
    echo "<pre>"; print_r($_SESSION); echo "</pre>";  // shows array at all times

    echo "<br />";
    echo session_save_path();                         // echoed path should have session files in it

    phpinfo();                                        // shows php settings
?>

但是,页面的输出始终是相同的,无论我做了多少页面刷新,没有值'BEFORE set :::'

BEFORE set:::
Array
(
)

AFTER set::: Hello
Array
(
    [test] => Hello
)

/var/lib/php/session

此外ls /var/lib/php/session显示其中没有文件。 但是,在chrome中打开开发人员控制台确实会始终为cookie密钥“PHPSESSID”显示相同的cookie值

我需要在我的机器上调整任何PHP设置吗? 在Amazon Linux EC2上运行

要开始调试会话,首先要查看的是错误日志。 如果那里什么都没有,那么通过明确地抛出错误来检查它是否正常工作。

接下来,您应该检查是否有任何带有session_start()的脚本正在您的浏览器上删除cookie。 如果不是,那么您可能在PHP脚本中有一个BOM标记,或者在调用session_start()之前导致标题刷新的自动前置文件。 这也意味着您的错误记录被破坏 - 返回并修复第一步。

如果服务器在响应中丢弃cookie,请检查cookie是否在后续请求中发回。 如果没有发送,那么cookie路径或浏览器配置有问题。

如果您的浏览器正在发回它收到的cookie并且会话中没有数据 - 那么您的会话处理程序将无法写入数据。 默认会话处理程序将文件写入磁盘 - 但配置的路径必须存在且必须可写。 再一次,你永远不应该进入这个阶段,检查你的错误记录是否正确设置。

它解决了

/var/lib/php/session的sessions文件夹没有足够的权限。 因此没有会​​话文件被写入其中。 这应该会在我的页面上抛出错误。 但我的display_errors标志在我的php.ini设置中设置为off

首先,我通过编写ini_set('display_errors', '1');打开display_errors而不触及机器的php.ini设置ini_set('display_errors', '1'); 在我的PHP脚本的顶部。 然后错误开始显示在我的页面中。 错误是:

Warning: session_start(): open(/var/lib/php/session/sess_r3um5msmio61t3vbbl7bp313i2, O_RDWR) failed: 
Permission denied (13) in /path/to/file/session.php on line 3
Undefined index: test in /path/to/file/session.php on line 5

因此,我转到会话文件文件夹并更改了文件夹权限。

$> cd /var/lib/php
$> ls ./session #should have shown PHP session files but not showing anything
$> ls -l
drwx------ 2 root root 12288 Jan 29 08:38 session
$> chmod 777 session
$> ls -l
drwxrwxrwx 2 root root 12288 Jan 29 08:38 session
$> service httpd restart
$> ls ./session #now PHP session files should show up after a page refresh

现在必要的会话文件被写入/var/lib/php/session没有任何问题,PHP会话开始正常工作


注意: 使用777 for chmod不是最佳做法,因为它打开了具有完全权限的目录/文件。 选择合适的chmod开关来实现结果。 您可以使用http://www.onlineconversion.com/html_chmod_calculator.htm为您的方案确定正确的chmod开关。 我愿意就这种情况下应该使用的正确chmod或chown设置发表评论

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM