我有一个Yii2应用程序,它通过外部API完成大部分工作,包括身份验证和大多数读取/更新请求。
登录后,我在会话中存储了一些加密值,并将加密密钥存储在cookie中。
问题是,cookie(或会话?)..在不活动30分钟后过期..但会话自动重新生成(不提示用户登录), 但是价值的检索被打破了。
主要问题是它很难重现(如果你让页面打开过夜通常会发生这种情况。)
我已将记住我和 Cookie过期时间设置为 0 但似乎有更多的选择需要解决。
以下是存储/检索会话数据的函数。
public static function storeData($stored_data)
{
$security = Yii::$app->getSecurity();
$key = $security->generateRandomKey();
$encrypted = $security->encryptByKey($stored_data, $key);
Yii::$app->getSession()->set('stored_data', $encrypted);
Yii::$app->response->cookies->add(new Cookie([
'name' => 'key',
'value' => $key,
//'expire' => time() + 60*60*24*30,
]));
}
private static function getData()
{
$security = Yii::$app->getSecurity();
$encrypted = Yii::$app->getSession()->get('stored_data');
$key = Yii::$app->request->cookies->get('key');
$stored_data= $security->decryptByKey($encrypted, $key);
return $stored_data;
}
答案 0 :(得分:0)
使用此Cookie生成代码而不是
public static function storeData($stored_data)
{
$security = Yii::$app->getSecurity();
$key = $security->generateRandomKey();
$encrypted = $security->encryptByKey($stored_data, $key);
Yii::$app->getSession()->set('stored_data', $encrypted);
$cookie = new CHttpCookie([
'name' => 'key',
'value' => $key,
]);
$cookie->expire = time()+60*60*24*180;
Yii::app()->request->cookies['key'] = $cookie;
Yii::$app->response->cookies->add(Yii::app()->request->cookies['key']);
}
在你的config / main.php里面
return array(
'components'=>array(
'request'=>array(
'enableCookieValidation'=>true,
),
),
);
获取更多详情here