【问题标题】:Why session_start is needed when using session?为什么使用 session 时需要 session_start?
【发布时间】:2010-03-17 09:18:28
【问题描述】:

为什么我可以在没有任何准备的情况下使用setcookie,而在使用$_SESSION之前需要session_start()?而且我认为他们所做的工作是相似的。

【问题讨论】:

    标签: php session


    【解决方案1】:

    因为setcookie()定义了一个 cookie 与其余的 HTTP 标头一起发送。这与session_start() 所做的完全不同,例如根据通过 GET 或 POST 请求或通过 cookie 传递的会话标识符创建会话或恢复当前会话。

    第一个只是在标题中添加一些内容并将其发送浏览器,而另一个获取会话 ID 来自 $_COOKIEs 或 $_GET 或 $_POST 然后尝试在session_save_path 中查找会话文件,并在找到时将其值反序列化为 $_SESSION,如果没有,则创建一个新会话,可能在设置会话 ID 的过程中使用setcookie

    chapter on Sessions in the PHP Manual.


    编辑 就像@Felix 在下面正确指出的那样,会话不一定保存在文件中。但这并不重要,因为参数保持不变:session_start 将找到并(重新)初始化您的会话数据,而setcookie 只是按照名称的含义进行操作。

    【讨论】:

    • 我知道了。感谢您提供高质量的答案。
    【解决方案2】:

    解释见我之前的回复。 如果您只是不想调用 start_session() 函数,请查看 php.ini 中的此设置: session.auto_start

    【讨论】:

      【解决方案3】:

      会话数据不一定像 Gordon 所说的那样存储在文件中。使用session_set_save_handler(),您可以定义自己的后端来存储值,例如在数据库中。

      所有这些数据检索都由session_start() 处理。这样您就可以轻松更改后端而不会破坏您的应用程序。

      注意:这只是session_start() 的一个原因,而且它的作用远不止设置 cookie。

      【讨论】:

        【解决方案4】:

        会话数据不一定像 Gordon 所说的那样存储在文件中。使用session_set_save_handler(),您可以定义自己的后端来存储值,例如在数据库中。

        所有这些数据检索都由session_start() 处理。这样您就可以轻松更改后端而不会破坏您的应用程序。

        注意:这只是session_start() 的一个原因,而且它的作用远不止设置 cookie。

        【讨论】:

          猜你喜欢
          • 2016-05-04
          • 1970-01-01
          • 1970-01-01
          • 2012-11-26
          • 1970-01-01
          • 1970-01-01
          • 2021-12-01
          • 2012-03-13
          相关资源
          最近更新 更多