【问题标题】:PHP - session file is missing after staring sessionPHP - 启动会话后缺少会话文件
【发布时间】:2012-10-16 02:57:15
【问题描述】:

我使用session_start() 开始一个会话,我可以将数据保存在$_SESSION 中。在我尝试从会话中检索数据时的回帖中,$_SESSION 数据为 NULL。我正在发布会话 ID,然后调用 session_id(passsedSessionID) 然后调用 session_start() 但是该会话中的数据已经消失。假定写入session_save_path 的会话文件不存在。

我猜这与没有写入会话文件有关。

update 找出了问题所在。我没有授予 php 进程对存储会话数据的目录的写入权限。 :-/

【问题讨论】:

  • 您通常不需要调用session_id 来让会话处理 POST 请求。你可能会犯一些错误,只是注意一下。
  • 使用会话时,您只需要确保 session_start() 几乎位于任何将使用会话的页面的开头。无需发布 id(最好不要发布!)。
  • 如果我没有传递会话 ID 并且我没有调用 session_id(passsedsessionId) 我如何知道我需要使用哪个会话?我可能有数百个用户有他们自己的会话。传递会话 ID 让我可以检索该用户的正确会话。没有?
  • @dev.e.loper NO. $_SESSION 变量从当前用户的会话返回数据。
  • 会话通常由 cookie 维持,因此您不需要通过查询字符串传递它们,实际上最好不要。

标签: php session


【解决方案1】:

只要$_SESSION全局变量只为当前用户的会话返回数据,就不需要每次都传递session_id。正如 @Brian 在 cmets 中提到的,不要忘记确保 session_start() 在您的代码顶部,然后不要关心会话标识。

好的,我希望这对你有意义。在不同的浏览器中尝试此代码并刷新页面几次:

<?php
session_start();
echo session_id();
?>

这将返回会话 ID,并且在不同的浏览器中它们会有所不同,但在页面刷新后它们将保持不变。

【讨论】:

  • "只要 $_SESSION 全局变量返回当前用户会话的数据"
  • 你不需要确保它。如果我访问页面$_SESSION 将返回我的会话,如果您访问同一页面,它将返回您的会话。
  • 我尝试了不调用 session_id() 的代码,但它并没有解决我原来检索会话数据的问题。会话文件仍未写入磁盘。
【解决方案2】:

我猜你正在以不同的方式解释 session 的用法。您只需要在每个页面的开头调用session_start(),这将同步页面之间的数据。

page1.php

session_start()
-- store some session data
-- Some form with action page2.php
-- Submit button

page2.php

session_start()
-- fetch the session data
-- fetch the form data

请看一下这个coredogs tutorial

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2013-06-15
    • 2011-12-12
    • 2018-05-25
    • 1970-01-01
    • 2015-10-03
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 2012-08-03
    相关资源
    最近更新 更多