【问题标题】:Session and cookie in same PHP file?同一PHP文件中的会话和cookie?
【发布时间】:2009-12-10 02:29:18
【问题描述】:

我不能在同一个 PHP 文件中设置会话和 cookie 吗?

如果我在设置会话后设置 cookie 并告诉我标头已发送,则会收到错误消息。

如果我在 cookie 之后设置会话,我什么也得不到,但似乎效果不佳。

【问题讨论】:

  • 你是如何设置会话的?您应该提供您的代码,以便我们了解发生了什么。
  • 你能贴出你正在使用的代码吗?

标签: php session cookies


【解决方案1】:

简短回答是肯定的 - 您可以在同一个 PHP 文件中设置 SESSION 和 COOKIE 数据。

更长的答案:

  • Cookie 数据在页面头部发送。
  • 将标头发送到客户端后,您无法设置 cookie。
  • 只要您开始向客户端(即:浏览器)输出任何数据,就会发送标头。

在您的情况下,您可能已在设置 SESSION 数据的同一位置发送标头和/或开始向客户端输出数据。

请参阅the PHP manual: Cookies 了解更多详情。特别是引用:

"cookie 是 HTTP 标头的一部分,因此必须在将任何输出发送到浏览器之前调用 setcookie()。这与 header() 具有相同的限制。您可以使用输出缓冲功能来延迟脚本输出,直到您决定是否设置任何 cookie 或发送任何标头。”

如果您需要进一步的帮助 - 尝试插入您遇到问题的示例代码/页面。

【讨论】:

    【解决方案2】:

    您始终可以在同一页面上的 cookie 上设置会话。但是,您应该始终在生成任何输出之前启动会话或设置 cookie。您收到的错误消息是因为您在启动会话(即 session_start())或设置 cookie(即setcookie())。

    有关更详细的说明,请参阅以下中的“说明”部分: http://php.net/manual/en/function.setcookie.php

    和“注释”部分: http://php.net/manual/en/function.session-start.php

    【讨论】:

    • 所以我应该先使用 setcookie() 还是先使用 session_start()。它们会互相干扰吗?
    • 我想没关系,但逻辑上 session_start() 应该排在第一位。 setcookie() 无论如何都会隐式启动一个会话。
    猜你喜欢
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-03
    • 2015-11-30
    • 2016-04-30
    • 1970-01-01
    相关资源
    最近更新 更多