我知道我要么正在跳过某些内容,要么错误地配置了会话,但Yii会话对我不起作用。我花了很多时间进行调试和搜索,但没有得到任何具体的答案。
如文档和互联网上的教程所述,我已将应用程序会话配置如下:
'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个多小时进行调试并寻找解决方案。非常感谢任何提前指示。
谢谢
〜塔伦
答案 0 :(得分:2)
很可能只是你的会话名称中有空格。
我刚刚对我的Yii实例进行了快速测试,将会话名称更改为其中有空格,并且会话的cookie值似乎每次都会更改。
答案 1 :(得分:1)
请在此网址http://php.net/manual/en/function.session-name.php
上阅读php会话名称文档它明确提到会话名称应仅包含字母数字字符。它也应该包含至少一个字母(会话名称也不能将其所有字符都作为数字)。否则,每次都会生成一个新的会话ID。
答案 2 :(得分:0)
chrome 44和chrome 47的错误,将其更新为51,没关系。
答案 3 :(得分:0)
请注意,因为我在Yii2中遇到了这个问题。我有一个常量COOKIE_DOMAIN
,该常量是通过php-fpm config设置的,它用于错误的域名,导致会话重置。确保将其设置为“ .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'.
],
...
]