简体   繁体   English

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

[英]Why the session destroyed every page load in mobile browsers?

My problem is that I have a website and when I refresh the a page, the session get destroyed.我的问题是我有一个网站,当我刷新页面时,会话被破坏了。 This means I lost my cart, my wishlist, etc... It happens in Safari and Firefox too, but on my PC the session stays there.这意味着我丢失了我的购物车、我的心愿单等......它也发生在 Safari 和 Firefox 中,但在我的 PC 上,会话保持在那里。 This is not an incognito tab/window, I not deleting my cookies and/or session data between refreshes and not specified in the browser settings to delete cookie (or another data) in any case.这不是隐身选项卡/窗口,我不会在刷新之间删除我的 cookie 和/或会话数据,也没有在浏览器设置中指定在任何情况下删除 cookie(或其他数据)。

I'm using Yii2 (latest installed via composer) with PHP 7.4 under an nginx with FPM.我在带有 FPM 的 nginx 下使用带有 PHP 7.4 的 Yii2(最新通过作曲家安装)。 php.ini config (the session): 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

My Yii2 config (frontend/config/main.php):我的 Yii2 配置(前端/配置/main.php):

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

My TestController in the frontend for my tests:我在前端的 TestController 用于我的测试:

<?php

namespace frontend\controllers;

use Yii;
use yii\web\Controller;

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);
    }
}

I tried various configs in the php.ini and in the Yii2 main config, but no luck.我在 php.ini 和 Yii2 主配置中尝试了各种配置,但没有成功。 Any idea apprisiated!任何想法apprisiated!

在询问了几个人和一些调试之后,问题是session.cookie_samesite = "Strict"当我将其更改为session.cookie_samesite = "None" ,问题就像魔术一样解决了。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM