为什么会话会破坏移动浏览器中加载的每个页面



我的问题是我有一个网站,当我刷新页面时,会话会被破坏。这意味着我丢失了我的购物车、愿望清单等…这在Safari和Firefox中也会发生,但在我的电脑上,会话会保持不变。这不是一个隐姓埋名的选项卡/窗口,我不会在刷新之间删除我的cookie和/或会话数据,也不会在浏览器设置中指定在任何情况下删除cookie(或其他数据(。

我使用Yii2(最新通过composer安装(和PHP 7.4,在带有FPM的nginx下。php.ini配置(会话(:

session.save_handler = files
;session.save_path = "/var/lib/php/sessions"
session.use_strict_mode = 0
session.use_cookies = 1
session.cookie_secure = 0
session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 5184000
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly = 0
session.cookie_samesite = "Strict"
session.serialize_handler = php
session.gc_probability = 1/100
session.gc_divisor = 1000
session.gc_maxlifetime = 5184000
session.referer_check =
session.cache_limiter = nocache
session.cache_expire = 5184000
session.use_trans_sid = 0
session.sid_length = 26
session.trans_sid_tags = "a=href,area=href,frame=src,form="
;session.trans_sid_hosts=""
session.sid_bits_per_character = 5
;session.upload_progress.enabled = On
;session.upload_progress.cleanup = On
;session.upload_progress.prefix = "upload_progress_"
;session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS"
;session.upload_progress.freq =  "1%"
;session.upload_progress.min_freq = "1"
;session.lazy_write = On

我的Yii2配置(frontend/config/main.php(:

return [
// ...
'modules' => [
// ...
'session' => [
'class' => 'yiiwebSession',
'timeout' => 5184000,
],
//..
],
// ..
'components' => [
// ..
'session' => [
'name' => 'advanced-frontend',
],
// ..
],
//..
];

我的测试前端的TestController:

<?php
namespace frontendcontrollers;
use Yii;
use yiiwebController;
class TestController extends Controller
{
/**
* Test index action
*/
public function actionIndex()
{
if(!Yii::$app->session->has('asd')) {
echo 'do not has ASD';
Yii::$app->session->set('asd', 1);
} else {
echo 'has ASD';
}
echo '<br />' . Yii::$app->session->id;
dd($_COOKIE, Yii::$app->request->cookies);
}
}

我在php.ini和Yii2主配置中尝试了各种配置,但没有成功。有任何想法通知!

在询问了几个人并进行了大量调试后,问题是session.cookie_samesite = "Strict"。当我将其更改为session.cookie_samesite = "None"时,问题像魔术一样得到了解决。

最新更新