【发布时间】: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