对于每个请求,Yii应用程序都会生成一个新的会话

fjnneemd  于 2022-11-09  发布在  其他
关注(0)|答案(4)|浏览(201)

我知道我要么是跳过了一些东西,要么是错误地配置了会话,但Yii会话对我来说不起作用。我花了很多时间在调试和搜索上,但它并没有得到任何具体的答案。
如文档和教程中所述,我已通过Internet配置了应用程序会话,如下所示:

'components'=>array(
    'user'=>array(
    // enable cookie-based authentication
    'allowAutoLogin'=>true,
    ),
    'session' => array (
    'sessionName' => 'Site Session',
    'class'=>'CHttpSession',
    'useTransparentSessionID'   =>($_POST['PHPSESSID']) ? true : false,
    'autoStart' => 'true',
    'cookieMode' => 'allow',
    'timeout' => 300
),

但是每次我向服务器发送请求时,我都会得到一个新的会话对象。我已经通过echo "Session id: ".Yii::app()->session->sessionID;验证了相同的对象,每次它都给我不同的id。同样,由于这种行为,我以前在会话中添加的变量也无法访问。
请提供一些指针,我已经花了4个多小时在调试和寻找解决方案。吨感谢任何指针提前。
谢谢
塔伦(~ T)

zu0ti5jz

zu0ti5jz1#

这很可能只是因为您的会话名称中有空格。
我刚刚在我的Yii示例上做了一个快速测试,修改了会话名,使其包含一个空格,并且会话的cookie值似乎每次都在改变。

4nkexdtk

4nkexdtk2#

请阅读php会话名称文档,网址为http://php.net/manual/en/function.session-name.php
它清楚地提到会话名称应该只包含字母数字字符。它也应该包含至少一个字母(会话名称不能将其所有字符也作为数字)。否则每次都生成一个新的会话ID。

dfuffjeb

dfuffjeb3#

chrome 44和chrome 47的bug,更新到51,没问题。

sczxawaw

sczxawaw4#

我在Yii 2中遇到了这个问题。我有一个常量COOKIE_DOMAIN,它是通过php-fpm配置设置的,它用于错误的域名,导致会话重置。请确保它设置为“. example.com“(包括开头的.以支持所有主机名)

'components'=>[
    'session' => [
            'class' => 'yii\web\DbSession',
            'cookieParams' => [
                'path' => '/',
                'domain' => COOKIE_DOMAIN, // <<<--- check this 
                'secure' => true,
            ],
            'writeCallback' => function($session){
                return [
                    'user_id' => Yii::$app->user->id
                ];
            },
            'sessionTable' => 'session', // session table name. Defaults to 'session'.
        ],
...
]

相关问题