会话数据仅在 Chrome 中丢失

Posted

技术标签:

【中文标题】会话数据仅在 Chrome 中丢失【英文标题】:Session data lost in Chrome only 【发布时间】:2012-01-05 01:53:22 【问题描述】:

我有一个与此线程中的问题类似的问题,如果不完全相同的话: Randomly Losing Session Variables Only In Google Chrome & URL Rewriting

但是该线程中的所有解决方案都不适合我。我的 php/mysql 应用程序中只有 Google Chrome 出现了奇怪的行为。如果我用 Firefox 试试,它可以工作,但 Chrome 不行。

我导航到购物车中的某个位置,并在代码中的多个位置存储会话数据。不用担心我开始会话或与此相关的任何事情,我在 webapp 开发方面已经有 11 年了,一切都做得很好。

在所有浏览器中,我可以var_dump($_SESSION) 并取回我的数据,但在 Chrome 中它不会保留数据。另请注意,会话确实传递了,我可以查看网络监视器,我看到正在发送的 cookie 以及与会话工作相关的许多其他事情,但没有保留一个 $_SESSION['last_viewed_element']。我似乎也无法设置其他任何东西,一切都丢失了。

编辑:

从 SESSIONS 切换到 COOKIES 解决了问题...

【问题讨论】:

您没有提供足够的信息。 PHP 本质上是与浏览器无关的,你要么传递格式错误的 cookie,要么使用一个你没有提到的抽象层,它专门处理不同的浏览器。 我知道这是使它最愚蠢的原因,除了我的小模组之外,该会话数据不被其他任何东西使用,并且数据仅在该浏览器上丢失,复制的确切步骤相同 我认为只有您提供的信息没有人可以帮助您。 我已经向我的另一位资深同事和我更资深的编程老板展示了这个错误,我们都被难住了,它在 Firefox 中使用相同的步骤,但在 Chrome 中却不行。我将在 Windows pc 上尝试 safari,看看该错误是否与 webkit 或仅与 chrome 有关。是的,我知道,它不应该包含服务器端数据,但是 chrome 的某些东西正在制造这个问题...... PHP 通过将会话标识符存储为访问浏览器中的 cookie 来识别哪个会话属于每个“访问者”(浏览器)。在每次后续访问中,浏览器都应该在其请求标头中发回 cookie,PHP 使用浏览器传递的会话 ID 在服务器上查找会话数据。听起来 Chrome 没有存储 cookie。您是否尝试过清除 cookie 并确保 Chrome 正确接受它们? 【参考方案1】:

我的情况只是 ini_set('session.cookie_secure','1');。我在 XAMPP 上本地检查网站。在 FF 上没问题,但在访问 chrome 时,它​​只是不断丢失会话。

【讨论】:

【参考方案2】:

在浪费你的时间之前试试这个

如果您已经登录您的网络空间(控制面板/Cpanel/Plesk 面板) 在同一个浏览器中。然后从该控制面板注销并清除 cookie 再试一次

万一

会话数据仅在 chrome 中丢失

就我而言,我只是重置 chrome 浏览器

转到 chrome://settings/ 然后点击高级然后重置

【讨论】:

为我工作,谢谢!几天后就出现了问题,它只发生在本地主机上。隐身模式以某种方式工作得很好。在找到您的评论之前,我尝试了很多删除 cookie、缓存、停用插件等。除了您对 chrome 重置的建议外,没有任何帮助。由于您的评论也是最近的,我想这是一些新的 chrome 错误。 我真的很高兴听到这个消息,因为这个问题我损失了一天:(【参考方案3】:

我发现我的问题版本与here 和here 的描述完全一样,所以我想在上面添加一个进一步的限定符

Google Chrome(v.59,稳定版)Inspector 不会告诉您 favicon.ico 无法访问,也不会告诉您页面被 302 重定向。

【讨论】:

【参考方案4】:

您可能只会在您的开发环境中丢失会话,这很可能是因为 Chrome 的“同源策略”。如果是这样,那么这就是你的解决方案Disable same origin policy in Chrome

【讨论】:

【参考方案5】:

我不确定您的情况是否与我的情况相似。但对我来说,原因是 URL 的形成。

对于 chrome,当将 URL 键入为“http://www.domainname.com”并在那里设置会话变量时。

并在没有 WWW 的情况下使用“http://domainname.com”重定向。 sessionid 不会被重用。

这解决了我的问题,希望对你有帮助

【讨论】:

【参考方案6】:

我有类似的问题,我发现了很奇怪的原因。 就我而言,css 类中的一个图像 url 是错误的!浏览器无法加载图像,并且由于该页面是带有密码字段的注册表单,出于安全原因,浏览器重置了会话。

【讨论】:

【参考方案7】:

我们昨天一整天都遇到同样的问题。

(对我们而言)(似乎)解决了这个问题的是 chrome 更新。

我们有版本 45.0.2454.93 和自从更新到版本 45.0.2454.99 后问题没有再次出现...

【讨论】:

【参考方案8】:

我找到了一个“解决方案”(不是问题,只是效果!!)... 如果在您的页面中使用 ajax,则 ajax 是 asyncronus ... 如果我调用一个处理 SESSION 的函数而不是调用另一个处理会话的页面,则有时第一次调用在第二次启动和第二次的第一次覆盖响应的影响之前没有完成。 我在每个 ajax 调用中解决了 async:false 的问题。

Ext.Ajax.request(
    url: '/io/resetsession.php', 
    **async: false**
);
Ext.Ajax.request(
    url: '/io/loaddata.php', 
    **async: false**,
    .....
);

【讨论】:

【参考方案9】:

这立即解决了我的问题:转到 chrome://settings/cookies 然后找到您的本地主机然后删除它的 cookie。解决方法很简单,值得一试

【讨论】:

【参考方案10】:

哈!我终于解决了!

在 PHP 中执行 header() 重定向时,您必须在其后执行 die()。这只适用于除 Chrome 之外的所有浏览器。

对于 Chrome,您还必须在 header() 之前添加一个 session_write_close()

Sweeeeeeeeet 成功

【讨论】:

【参考方案11】:

遇到同样的问题,终于解决了。登录设置与 domain.com 的会话,但在重定向中它是 www.domain.com。 IE 和 FF 似乎假设 www 和 no www 是相同的,但 Chrome 却没有。通过检查每个页面加载的网络日志中的主机来找到。

【讨论】:

【参考方案12】:

我遇到了同样的问题,但是在带有 ASP.Net MVC 的 IIS 上。 IE 和 Firefox 运行良好,但在 Chrome 上我丢失了会话数据。最终发现在 Chrome 中清除 cookie 时出现 404 错误。以下是我查找问题并解决的步骤。我建议其他人尝试:

    在 Chrome 上,使用工具 -> 开发人员工具。刷新页面,让“开发者工具”开始显示数据。

    在开发人员工具上,检查资源 -> Cookie。成功登录后,我有 2 个用于我正在测试的域的 cookie。在导航到我失去会话的页面时,其中一个 cookie 不再显示。屏幕截图是在修复后拍摄的,显示了两个 cookie:

    现在检查网络选项卡。仔细查看任何有错误的资源(html/image/css/js/...)。我的字体文件出现 404 错误。 404 错误是由 IIS 中缺少 mime 类型引起的。 修复 404 错误清除了 Chrome 中的问题。修复后再次截取的屏幕截图,所有资源都处于正常状态:

好处是,调查这个问题帮助我发现 IIS 中缺少 mime 类型,这影响了所有浏览器上的更多页面。

【讨论】:

【参考方案13】:

查看以下链接: http://code.google.com/p/chromium/issues/detail?id=45582

我相信问题在于 PHP 获取的请求与文件不匹配,然后没有正确处理 404。我必须告诉 nginx 将任何 URL 与 favicon.ico 匹配,然后返回 404。

这是我的 Nginx 线路:

 if ($request_uri ~ 'favicon') 
            return 404;
 

【讨论】:

【参考方案14】:

我通过删除线解决了这个问题:

base href="http://mysite/"

来自 HTML 代码中的 head 标记。

【讨论】:

【参考方案15】:

问题可能是您的服务器正在寻找网站图标,如果找不到,服务器会抛出 302 重定向,这会杀死会话变量。

【讨论】:

我知道您目前没有代表可以将此作为评论发布,但将来最好将其作为评论。答案通常应该是您非常确定可以解决问题的内容。 302 杀死会话变量?为什么? 这是我猜的最佳答案。我今天讨厌铬。因为需要 5 个小时才能找出问题所在。谢谢你的回答。【参考方案16】:

我遇到了一个非常相似的问题,在我的情况下,问题是由于 Chrome 中缺少 favicon.ico 而调用了 404。 404.php 调用了改变 Session 变量的页脚。 我希望对某人有所帮助。

【讨论】:

这完全帮助了我。多么奇怪的错误,即使它在我身边。真的,真的很难调试。谢谢! 很奇怪,但那是真的……印象深刻!! 一些有用的链接:allinthehead.com/retro/359/a-favicon-broke-my-appchrome相关favicon中的错误:code.google.com/p/chromium/issues/detail?id=216633code.google.com/p/chromium/issues/detail?id=114082code.google.com/p/chromium/issues/detail?id=180764其他浏览器中的类似问题:bugzilla.mozilla.org/show_bug.cgi?id=263057webperformance.com/load-testing/blog/2010/11/… 你是个救星,本。如果您尝试追查此问题时的一天与我一样,我对您表示同情。这真是一个奇怪的问题...... 天哪,我已经绞尽脑汁好几天想弄清楚这一点。尽管我很喜欢 Chrome,但它有时还是很糟糕。这是一种爱恨交织的关系。【参考方案17】:

我使用的代码也有同样的问题。通过删除以下内容解决:

session_id($_GET['sid']);
session_write_close();

【讨论】:

【参考方案18】:

我遇到了这个问题并且能够解决它。 Chrome 一直在寻找 .ico 文件,并且由于某种原因它影响了它。一旦我将 .ico 文件放在站点的根目录中,一切都开始工作了。疯狂但真实。

【讨论】:

不,看到你的帖子并没有解决它。还是谢谢 @camilo 谢谢!这就是造成我损失的原因,这是我见过的最奇怪的错误。【参考方案19】:

毕竟,没有答案,问题仍然存在,我只是改用 cookie,如果有人同时使用 chrome+wordpress 遇到这个问题,不要浪费更多时间,切换到 cookie...

【讨论】:

这不是问题的解决方案。【参考方案20】:

在你的 php ini 文件中尝试设置

session.save_path = /path/to/your/tmp

在某些服务器上,有时会话需要一个明确的直接会话文件才能保存在本地目录中,否则会发生一些奇怪的事情。

【讨论】:

服务器会话工作正常,只有 chrome 不能。所有其他浏览器都保留会话数据,总是值得一试... tx

以上是关于会话数据仅在 Chrome 中丢失的主要内容,如果未能解决你的问题,请参考以下文章

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

Rails 仅在生产时才在页面重新加载时丢失会话变量 current_user_id(React 16.13、Rails 6、Heroku)

Chrome 和 IE 不发送 ASP.NET_SessionID - 即会话变量丢失?

为啥我在 IE 9 中丢失了有关 Ajax 请求的 cookie 和会话

[更新mysql表后仅在单个列中丢失数据

重定向到条带后丢失会话数据