问题描述
我很担心,我只是发现我的PHP会话在Chrome中无法正常工作。实际上,我正在使用Silex框架(SesionServiceProvider)将会话存储在我的应用程序中的Bigcommerce应用程序上。在Firefox中可以正常运行,但在Chrome中则不能。
第一次加载页面时,它会显示会话值,但是当我发送任何AJAX请求或使用POST请求或任何从主页发送数据的页面请求提交任何表单时,会话变量将被破坏,但是当我重新启动会话时,则表明会话已经开始且没有会话变量。
此外,我读了此https://blog.heroku.com/chrome-changes-samesite-cookie 我的解决方案需要设置相同的站点。但是我找不到在我的应用会话中如何设置samesite属性。
我使用以下代码设置我的应用会话
$app['session']->set('sessionname','sessionvalue');
我在同一网站上尝试过
$app['session']->set('sessionname','sessionvalue',['samesite' => 'None','secure' => true]);
但不起作用。
解决方法
我终于有了解决方案,想在这里写,只是因为它可能对某人有帮助。
我在服务器上的.htaccess文件中添加了一个条件,
<If "%{HTTP_USER_AGENT} !~ /(iPhone; CPU iPhone OS 1[0-2]|iPad; CPU OS 1[0-2]|iPod touch; CPU iPhone OS 1[0-2]|Macintosh; Intel Mac OS X.*Version\x2F1[0-2].*Safari|Macintosh;.*Mac OS X 10_14.* AppleWebKit.*Version\x2F1[0-3].*Safari)/i">Header always edit Set-Cookie (.*) "$1; SameSite=None; Secure"</If>