会话cookie在重定向期间丢失

时间:2018-03-25 04:02:25

标签: php http cookies session-cookies

所以我有这个非常奇怪的问题。我一直在喋喋不休地谈论这个,我以为我错过了一些明显的东西。我有一个带有自定义会话处理程序的Web应用程序,它在存储在服务器端时加密会话数据。它完美无缺,直到遇到我刚刚添加的新代码。

if( $behaviorDefined === false ) {
    if( !isset( $_GET['systempage'] ) || $_GET['systempage'] != "wikiconfig" ) {
        header( "HTTP/1.1 307 Temporary Redirect", true, 307 );
        header( "Location: index.php?page=systemconfig&systempage=wikiconfig", true, 307 );
        echo "This site is not set up yet.";
        exit( 1 );
    }
}

甚至更奇怪,当我注释掉2个标题调用时,只加载正在回显的文本时,当我点击刷新时,cookie只会在每隔一个页面加载时设置。

一些信息:

  • $ behaviorDefined是一个布尔值,当声明函数确定网站设置正确时,该布尔值为true。如果为false,则应该重定向到允许用户设置网站配置值的页面。
  • 如果需要重定向,那么GET值就是网站的位置,以避免无限重定向。
  • 您可以假设会话处理程序按预期工作,因为问题只发生在代码执行进入代码的这一部分时,并且此会话处理程序已在生产中使用了大约一年而没有问题。
  • 正在设置的cookie是HttpOnly,路径设置为包含index.php文件的根。该路径与URI路径匹配。
  • 每次向网页发出HEAD请求时,通过CLI上的curl,定义了Set-Cookie,并且需要设置cookie。

任何可能导致浏览器丢弃cookie的想法?我对此完全无能为力。有没有办法检查PHP中的传出标题?

1 个答案:

答案 0 :(得分:0)

我不知道为什么现在决定开始破解,但是在会话开始之前设置了cookie。通常,会话启动会将设置cookie从“Set-Cookie:sessionName = deleted”更改为“Set-Cookie:sessionName = {sessionid}”,由于某种原因它只是在没有收到cookie时才这样做,然后当它确实收到一个cookie时,他没有费心去传递cookie。我已经将它移动到session_start()之后调用,它似乎创建了一致的结果,但我记得被告知应该始终首先调用set cookie。也许我整个时间都错了?