所以我正在尝试将令牌方法添加为登录名中的额外安全功能,我所做的如下
登录.php
$token = $_SESSION['token'] = md5(uniqid(mt_rand(),true));
if(Yii::app()->user->hasFlash('error')){
?>
<div class="flashMessage">
<?php echo Yii::app()->user->getFlash('error') ?>
</div>
<?php
}
?>
<input type="hidden" name="token" value="<?php echo $token ?>"/>
//Rest of the form
现在内部操作登录我有以下内容。
// collect user input data
if(isset($_POST['LoginForm'])){
//Check if the token matches
if($_POST['token'] == $_SESSION['token']){
$model->attributes=$_POST['LoginForm'];
// validate user input and redirect to the previous page if valid
if($model->validate() && $model->login())
$this->redirect(Yii::app()->user->returnUrl);
}
}
现在,当我尝试登录时,出现以下错误
未定义的变量:_SESSION
我不明白为什么它告诉会话不存在,因为它具有相同的名称。
我赞赏的任何帮助
在Yii
中使用SESSION
,就像以下方法之一一样:
1.使用 Yii::app()->session
Yii::app()->session['KEY']='VALUE'; //setting session
$key=Yii::app()->session['KEY']; //getting session
2.使用 Yii 的状态
Yii::app()->user->setState('KEY','VALUE'); //setting session
$key=Yii::app()->user->getState('KEY'); //getting session
但是状态和会话之间有什么区别?
如果您使用 setState()
| State
,应用程序之间冲突的概率将通过添加哈希来降低,因为它在会话 KEY 中添加了一个哈希,例如,如果您从 $_SESSION
获得转储,您将看到:
'0f42ca4d61b26371fee67cc51d7b48d3KEY' => 'VALUE'
但是如果你使用Yii::app()->session
它将存储普通的KEY,如下所示:
'KEY' => 'VALUE'
你可以检查 SetState()、getState() 和 hasState()