会话信息在Chrome中丢失(但在其他浏览器中有效)

时间:2013-10-21 09:53:05

标签: php google-chrome session

这可能是与Session data lost in Chrome only相同且与Randomly Losing Session Variables Only In Google Chrome & URL Rewriting

相关的问题

那里没有适合我的解决方案,我希望有人对此有一些新的意见。

以下是我遵循的步骤:

  1. 我使用<?php session_start();?>初始化会话(不是cookie),然后在$_SESSION['nu'] = $userName;

  2. 的同一个php文件中设置变量
  3. 然后我重定向到window.location.href = "foo.php"的新php。那个php文件启动会话(第一件事,与上面相同),然后使用$ _SESSION ['nu']。到目前为止,所有浏览器都能正常运行。

  4. 在Chrome上的第二个php页面(步骤2中的那个)(31.0.1650.26 beta):

    • 我可以在通过AJAX调用访问的php文件中使用$ _SESSION ['nu']。
    • 如果我重新加载页面,则不再设置$ _SESSION ['nu']。在第一次加载后,它没有设置。
    • 如果我转到另一个也需要$ _SESSION ['nu']的页面,它也无法访问它。
  5. 在Safari(5.1.9和5.1.7)和Firefox(24.0和18.0)上我可以重新加载并转到另一个页面,$ _SESSION ['nu']已设置且一切正常。

  6. 当我在家庭环境(MAMP 1.9.6)上进行测试时,它在Chrome上也能正常运行。

  7. 在两个php.ini文件(家庭和在线)中,session.use_only_cookies为On(Local和Master)。

  8. 由于我可以通过AJAX访问它(无需更改页面),因此当访问新页面时,Chrome会出现会话问题。但为什么它第一次工作呢?我确实改变了页面......

    我尝试了favicon.ico解决方案(我在网络根目录中放置了一个名为favicon.ico的图标文件),但它没有改变任何内容。

    有什么建议吗?谢谢!

    更新

    • 所有试图访问$ _SESSION ['nu']的php文件都位于root('my'root,因为我正在使用网络酒店)。
      • 在Chrome的控制台中查看“资源” - > Cookies',我可以看到cookie一直存在(当我从启动会话的php文件移动到foo.php时)。
      • 令我难以置信的是,它在FF和Safari中有效......

    UPDATE2

    来自控制台的图片。这就是我在foo.php(第二页)中看到的内容:

    铬:

    enter image description here

    Safari浏览器:

    enter image description here

    解决方案(希望如此): 我不知道为什么它现在正在工作,这让我感觉不太舒服,但暂时...为了解释发生了什么,我需要提供更多细节:

    • index.php调用start_session()。设置变量$ _SESSION ['nu'] = Null。然后页面等待点击登录按钮。

    • 登录按钮有一个脚本,通过AJAX调用singIn.php,调用start_session()并设置$ _SESSION ['nu'] =“bar”。在AJAX调用的done()函数中,脚本调用window.location.href =“foo.php”。

    • foo.php调用session_start()并检索$ _SESSION ['nu']。

    在我的try-anything-mode中,我测试了从index.php中删除start_session()。我还删除了作业$ _SESSION ['nu'] = Null。我希望它们能够确保访问index.php会清理会话并事实上注销用户。但该网站确实有一个适当的注销选项,所以我可以坚持下去。

    如果没有index.php中的这些行,它似乎可以在Chrome中使用。也就是说,当用户浏览网站中的其他页面或重新加载foo.php时,$ _SESSION ['nu']的值不会丢失。

    正如我之前所说,这在FF和Safari中一直有效。现在也在Chrome中。如果有人能找到解释,我一定会很感激!

2 个答案:

答案 0 :(得分:0)

我遇到了类似的问题:在页面渲染后的很短时间内就清除了cookie(有时但并非总是如此)。原因是在页面渲染期间多次调用内部API,该内部API具有session_start();内部。

从API中删除session_start()解决了问题。

Chrome和Firefox一直存在问题,Safari正常工作。

答案 1 :(得分:0)

这可能是跨域问题。 尝试对附加上的 cookie 使用 sameSite 选项配置:

   var cookieOptions = new CookieOptions
            {
                HttpOnly = true,
                Secure = true,
                Expires = DateTime.UtcNow.AddDays(7),
                SameSite = SameSiteMode.None
            };
            Response.Cookies.Append("refreshToken", token, cookieOptions);