代码之家  ›  专栏  ›  技术社区  ›  powerpete

当session\u start()位于标头(…)之后时,标头未正确发送[副本]

  •  0
  • powerpete  · 技术社区  · 7 年前

    我的问题有一个简化的例子:

    会话\u开始前的变量标头

    <?php
    header("Expires: ".gmdate("D, d M Y H:i:s", time() ) . " GMT");
    session_start();
    exit;
    //Headers Received in the Browser: Expires: Thu, 19 Nov 1981 08:52:00 GMT
    

    Variant session\u在标头之前启动(按预期工作)

    <?php
    session_start();
    header("Expires: ".gmdate("D, d M Y H:i:s", time() ) . " GMT");
    exit;
    //Headers Received in the Browser: Expires: Thu, 29 Mar 2018 06:42:07 GMT
    

    呼叫时 session_start() 在设置标题之前,一切正常,正如预期的那样。 但是当我打电话的时候 会话\u开始() 设置标头后,标头不会像中设置的那样发送到浏览器 header(...)

    原因是什么?为什么session\u start()会“清除”所有设置的标头?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Takit Isy Surendra    7 年前

    我不知道这种行为,所以我查找了函数文档。
    以下是一些有助于您了解情况的链接:

    http://php.net/manual/en/function.session-start.php

    注:
    此函数根据配置发送多个HTTP标头。请参阅session\u cache\u limiter()自定义这些标头。

    http://php.net/manual/en/function.session-cache-limiter.php

    实际上,取决于 session_cache_limiter() ,使用 session_start() 可以覆盖标题“Expires”、“Cache Control”和“Last Modified”。

    希望有帮助。