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

uyto3xhc  于 2022-11-28  发布在  PHP
关注(0)|答案(1)|浏览(162)

这可能是与Session data lost in Chrome only相同的问题,并且与Randomly Losing Session Variables Only In Google Chrome & URL Rewriting相关
有没有解决方案,有将为我工作,我希望有人有一些新的投入到这一点。

以下是我遵循的步骤:

1.我用<?php session_start();?>初始化一个会话(不是cookie),然后在同一个php文件中用$_SESSION['nu'] = $userName;设置变量
1.然后我用window.location.href = "foo.php"重定向到一个新的php文件,这个php文件启动会话(第一件事,和上面一样),然后使用$_SESSION ['nu']。

  • 在Chrome(31.0.1650.26 beta)上的第二个php页面(步骤2中的那个)上:
  • 我可以在通过 AJAX 调用访问的php文件中使用$_SESSION ['nu']。
  • 如果我重新加载页面,$_SESSION ['nu']就不会再被设置。
  • 如果我转到另一个也需要$_SESSION ['nu']的页面,它也无法访问它。
  • 在Safari(5.1.9和5.1.7)和Firefox(24.0和18.0)上,我可以重新加载并转到另一个页面,设置了$_SESSION ['nu'],一切正常。
  • 当我在我的家庭环境(MAMP 1. 9. 6)上测试这个时,它在Chrome上也工作得很好。
  • 在两个php.ini文件(home和online)会话中,use_only_cookes都是On(Local和Master)。

因为我可以通过 AJAX 访问它(不改变页面),所以当我进入一个新页面时,Chrome似乎在会话中有问题。但是为什么它第一次就工作了呢?我确实改变了页面...
我已经尝试了favicon.ico解决方案(我在web根目录下放置了一个名为favicon.ico的图标文件),但它没有改变任何东西。
有什么建议吗?谢谢!

更新

  • 所有试图访问$_SESSION ['nu']的php文件都位于根目录('my'根目录,因为我使用的是一个web酒店)。
  • 在Chrome的控制台中,进入'Resources -〉Cookies',我可以看到cookie一直存在(当我从启动会话的php文件移动到foo.php时)。
  • 令我难以置信的是,它在FF和Safari中都能正常工作...
    更新2

这是我在foo.php(第二页)中看到的内容:
镀铬:

野生动物园:

**解决方案(希望如此):**我不知道为什么现在它能工作,这让我不太舒服,但就目前而言......为了解释发生了什么,我需要给予一些更多的细节:

  • php调用start_session()。设置变量$_SESSION ['nu'] = Null。然后页面等待登录按钮被点击。
  • 登录按钮有一个脚本,通过 AJAX 调用singIn.php,后者调用start_session()并设置$_SESSION ['nu'] =“bar”。在AJAX调用的done()函数中,脚本调用window.location.href =“foo.php”。
  • 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中也是如此。如果有人能找到解释,我肯定会很感激!

qnakjoqk

qnakjoqk1#

这可能是一个跨域问题。请尝试对append上的cookie使用sameSite选项config:

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

相关问题