当session_start()在标题(...)之后时,标题未正确发送

时间:2018-03-29 07:27:30

标签: php session http-headers

我的问题缩小了示例:

session_start

之前的变体标题
<?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

标题之前的变量session_start(按预期工作)

<?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()时,一切正常并且符合预期。 但是,当我在设置标题后调用session_start()时,标题不会按照header(...)中的设置发送到浏览器。

这是什么原因?为什么session_start()&#39;清除&#39;所有的标题?

1 个答案:

答案 0 :(得分:2)

我不知道这种行为,所以我查找了功能文档 以下是一些可以帮助您了解正在发生的事情的链接:

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

“注意:
此函数根据配置发送多个HTTP头。请参阅session_cache_limiter()以自定义这些标头。“

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

实际上,根据session_cache_limiter()的配置,使用session_start()可以覆盖标题“Expires”,“Cache-Control”和“Last-Modified”。

希望它有所帮助。