这可能是与Session data lost in Chrome only相同且与Randomly Losing Session Variables Only In Google Chrome & URL Rewriting
相关的问题那里没有适合我的解决方案,我希望有人对此有一些新的意见。
以下是我遵循的步骤:
我使用<?php session_start();?>
初始化会话(不是cookie),然后在$_SESSION['nu'] = $userName;
然后我重定向到window.location.href = "foo.php"
的新php。那个php文件启动会话(第一件事,与上面相同),然后使用$ _SESSION ['nu']。到目前为止,所有浏览器都能正常运行。
在Chrome上的第二个php页面(步骤2中的那个)(31.0.1650.26 beta):
在Safari(5.1.9和5.1.7)和Firefox(24.0和18.0)上我可以重新加载并转到另一个页面,$ _SESSION ['nu']已设置且一切正常。
当我在家庭环境(MAMP 1.9.6)上进行测试时,它在Chrome上也能正常运行。
在两个php.ini文件(家庭和在线)中,session.use_only_cookies为On(Local和Master)。
由于我可以通过AJAX访问它(无需更改页面),因此当访问新页面时,Chrome会出现会话问题。但为什么它第一次工作呢?我确实改变了页面......
我尝试了favicon.ico解决方案(我在网络根目录中放置了一个名为favicon.ico的图标文件),但它没有改变任何内容。
有什么建议吗?谢谢!
更新
UPDATE2
来自控制台的图片。这就是我在foo.php(第二页)中看到的内容:
铬:
Safari浏览器:
解决方案(希望如此): 我不知道为什么它现在正在工作,这让我感觉不太舒服,但暂时...为了解释发生了什么,我需要提供更多细节:
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中。如果有人能找到解释,我一定会很感激!
答案 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);