【问题标题】:Session cookie getting dropped during redirect会话 cookie 在重定向期间被丢弃
【发布时间】:2018-09-03 11:23:31
【问题描述】:

所以我遇到了这个非常奇怪的问题。我一直在为此烦恼,我想我错过了一些明显的东西。我有一个带有自定义会话处理程序的 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 是一个布尔值,当声明函数确定站点设置正确时为真。设置为 false 时,它​​应该重定向到让用户设置站点配置值的页面。
  • 这些 GET 值是网站在需要重定向时应该位于的位置,以避免无限重定向。
  • 您可以假设会话处理程序按预期工作,因为该问题仅在代码执行进入这部分代码时发生,并且此会话处理程序已在生产中使用了大约一年而没有出现问题。
  • 设置的 cookie 为 HttpOnly,路径设置为包含 index.php 文件的根目录。路径与 URI 路径匹配。
  • 每次向网页发出 HEAD 请求时,通过 CLI 上的 curl 都会使用需要设置的 cookie 来定义 Set-Cookie。

有什么可能导致浏览器丢弃 cookie 的想法吗?我对此一无所知。有什么方法可以从 PHP 中检查传出标头?

【问题讨论】:

  • 尝试使用协议header( "Location: http://yordomain.com/welcome.php?page=systemconfig&systempage=wikiconfig", true, 307 );在位置标头中传递绝对url
  • 不幸的是,这并没有解决问题,所有其他重定向都可以正常工作。

标签: php http cookies session-cookies


【解决方案1】:

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

【讨论】:

  • 是的,在您调用 session_start() 之前,任何会话功能都不会起作用
  • 包括setcookie?我记得 session_start 将 cookie 定义为包含 sessionID,如果 setcookie 定义了之前的 cookie。
  • 您是否在自定义会话实现中使用了任何 php 的会话函数?
猜你喜欢
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 2017-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-05
  • 1970-01-01
相关资源
最近更新 更多