PHP会话变量不写入文件

时间:2014-01-02 21:06:11

标签: php session session-variables

正在创建我的PHP会话,但$_SESSION变量未写入会话文件。

我在这里有三个测试PHP页面,我用它来诊断这个问题:

test_a.html

<html>
<body>
    <form action='test_b.php' method='post'>
        Put something here: 
        <input type='text' name='saveme' /> 
        <input type='submit' value='Go!' />
    </form>
</body>
</html>

test_b.php

<?php
    session_start();
    $_SESSION['saveme']=$_POST['saveme'];
    echo "Here's what you wrote:<br>".$_SESSION['saveme']."<br>".
        "<a href='test_c.php'>Take me to the final check</a><br>";
    echo "And here's your session_id: ".session_id();
    session_write_close();
?>

test_c.php

<?php
    session_start();
    echo "Here's what you wrote (maybe?):<br>".$_SESSION['saveme']."<br>".
        "You should also see saveme below:<br>";
    foreach ($_SESSION as $key=>$val)
        echo $key." ".$val."<br>";
    echo "And here's your session_id: ".session_id();
?>

当打开test_a.html并在文本框中输入任何内容并点击Go!时,它将在test_b.php上正确显示(当它从内存中设置和调用时),但它不显示在{ {1}}。

test_c.php已设置并显示为相同。 cookie存储正确。会话文件在文件系统中正确创建,但未写入并且仍为零字节文件。

现在没有在我网站的任何页面上写入会话(尽管到目前为止已经工作了一年多),因此这些代码段中的拼写错误(如果有的话)可能无关紧要。

我检查过的事情:

  • 会话存储目录是可写的,磁盘有足够的存储空间
  • session_id总是成功的(并且之前没有任何内容)
  • session_start已正确创建且在两个页面上都相同
  • 使用正确的session_id
  • 创建会话Cookie
  • session_idsession.use_cookies
  • 注册globals已关闭
  • 启用Cookie
  • 清除session.use_only_cookies目录以减少文件系统问题的可能性
  • 尝试将会话数据存储在内存中(不起作用)
  • 尝试更改会话文件位置(不起作用)
  • 在Chrome&amp;火狐

想法?

2 个答案:

答案 0 :(得分:0)

您的会话存储目录可能是可写的,但文件不可写。尝试在会话文件上将权限设置为0666,并检查是否可以解决问题。这就像一个进程正在创建文件,而下一个进程无法编写它。创建时文件的所有者是什么?检查它是否是www-data或运行你的php。

答案 1 :(得分:0)

PHP会话密钥由管道字符|分隔所以|在密钥名称将打破你的会话。也许这就是问题所在。

检查一下:

enter link description here