【问题标题】:Session cookies disappearing from Chrome with PHP/Apache server使用 PHP/Apache 服务器从 Chrome 中消失的会话 cookie
【发布时间】:2017-11-09 08:58:44
【问题描述】:

更新:看起来几天前开始的问题是由于对 cookie“安全”标志的错误处理造成的。但是,我们仍然没有解决从 2 月 1 日开始的问题。

我在我工作的地方运行一个内部 PHP/Apache 站点。 2 月 1 日,我们开始收到报告称员工每天会随机退出数次。多年来我们没有更改任何身份验证代码,但我们注意到 Chrome 当天收到了重大更新:https://chromereleases.googleblog.com/2017/02/stable-channel-update-for-desktop.html

在过去的几天里,问题变得更加严重,Chrome 根本没有为某些用户存储会话 cookie。导航到该站点后,服务器尝试设置一个 cookie,员工被重定向到 Google 进行身份验证,然后当他们返回该站点时,他们的 cookie 就消失了。

我在这个简单的 php 文件中用最少的代码重现了这个问题:

<?php

session_set_cookie_params(60 * 60 * 24 * 7, '/', '.corp.company.com', false, true);
session_name('CompanySessionID');
session_start();
$_SESSION['UserName'] = 'test';

当受影响的员工访问该页面时,设置的 cookie 标头按预期通过,但 Chrome 不存储 cookie。

其他细节:

  • 我已经尝试了PHP session lost after redirect 上的所有建议
  • 原来问题不影响隐身模式,但从几天前开始影响
  • 清除缓存/cookie 对问题没有任何帮助
  • 之前重新安装 Chrome 可以解决大约一周的问题
  • Firefox 或 Safari 中不存在此问题
  • 并非所有员工都受到影响
  • 所有员工都使用 OS X
  • 将会话名称从 CompanySessionID 更改为 CompanySession 解决了部分用户的问题,但又解决了另一部分用户的问题
  • 会话仍在服务器上,只是浏览器中缺少 cookie
  • 使用代理监视请求我可以看到没有应该删除 cookie 的标头。
  • 我们使用的是 PHP 5.4.24

如何找到此问题的根源?我应该向 Chrome 提交错误吗?

【问题讨论】:

  • 所有其他浏览器都可以正常工作吗?
  • @cmorrissey firefox 和 safari 都可以正常工作
  • Chrome 2 天前发布了新版本,是否解决了问题?你是在 https 和 http 之间切换吗?
  • 我们实际上在几天前推出了 HTTPS。看起来我们对安全标志的处理有问题,我们没有检查 $_SERVER['HTTPS'] !== 'off' 是否已设置。
  • 修复该问题并更改会话 ID 后,它看起来可以正常工作了。我想知道这是否也可能导致随机注销问题?如果此更改也解决了该问题,我将在此处更新。很好的电话来调查那个@cmorrissey。我看到了stackoverflow.com/questions/441496/…,但没有看到第二个答案。

标签: php apache google-chrome session cookies


【解决方案1】:

在@cmorrissey 的帮助下,我发现了最近的问题。我们最近向服务器推出了 HTTPS,当人们通过 HTTPS 获得新的 cookie 时,他们会设置安全标志。

之后,cookie 将不再通过 HTTP 请求发送(如预期的那样)。然而,出乎意料的是,Chrome 也不再允许服务器设置同名的不安全会话 cookie,因为安全会话 cookie 已经存在。这就是为什么问题中显示的示例 PHP 文件根本无法设置 cookie,除非会话名称发生更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多