如果在我的网站上使用yii session进行会员登录。如果我在没有注销会话的情况下关闭系统,则会话维护到第二天。如何清除我的会话。
在我的配置文件中。我有以下代码。
配置代码: -
return array(
'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
'name'=>'sitename',
'sourceLanguage' => 'sys',
'language' => 'en',
'preload'=>array('log', 'PreloadCms'),
'import'=>array(
'application.models.*',
'application.components.*',
'application.modules.user.models.*',
'application.modules.user.components.*',
'application.extensions.easyimage.EasyImage',
'zii.behaviors.*',
),
'gii'=>array(
'class'=>'system.gii.GiiModule',
'password'=>'admin',
)
) + require(dirname(__FILE__).'/modules.php')
,
'components'=>array(
'PreloadCms' => array (
'class' => 'application.modules.cms_core.components.PreloadCms',
),
'user'=>array(
'class' => 'WebUser',
'allowAutoLogin'=>false,
),
)
);
然后我在这里设置会话: -
public function authenticate()
{
$user=Signup::model()->findByAttributes(array('varEmail'=>$this->username));
if($user===null)
$this->errorCode=self::ERROR_USERNAME_INVALID;
else if($user->varPassword!=$this->password)
$this->errorCode=self::ERROR_PASSWORD_INVALID;
else
{
$this->errorCode=self::ERROR_NONE;
$this->_id=$user->intId;
Yii::app()->session['id']=$user->intId;
$this->username=$user->varEmail;
}
return $this->errorCode==self::ERROR_NONE;
}
答案 0 :(得分:0)
如果您使用authenticate方法登录用户它不太正确,最好使用另一种方法来设置会话,就像在默认的yii LoginForm中一样。
public function login()
{
if($this->_identity===null)
{
$this->_identity=new UserIdentity($this->username,$this->password);
$this->_identity->authenticate(); // Authenticate just checks if a user exists.
}
if($this->_identity->errorCode===UserIdentity::ERROR_NONE)
{
$duration=$this->rememberMe ? 3600*24*30 : 0; // Set here the session life.
Yii::app()->user->login($this->_identity,$duration); // Use this method to proper login the user
return true;
}
else
return false;
}
有关详情,请查看:http://www.yiiframework.com/doc/guide/1.1/en/topics.auth
确保遵循正确的yii图案,而不是重新发明轮子。