首先来看代码:
<code class="lang-php"><br>class UserController extends Controller {
public function filterIsSessionWrong($filterChain){
if (isset(Yii::app()->user->userId)&&(!empty(Yii::app()->user->userId))) {
$filterChain->run();
} else {
_echo(2, '用户id获取失败,您需要重新登录');
$this->redirect(array('user/login'));
}
}
public function filters() {
return array( 'IsSessionWrong - login,register', );
}
</code>由于客户端是手机。手机访问是通过session来访问的。当这个session不存在的时候,就告诉客户端需要重新登录一下(默认是10天)。
但是我这样做只能在UserController中间(除去注册与登录不需要判断外)去过滤。事实上所有的controller都要检验一下。如果都要检验一下的话,我不得不将这一段代码复制到所有的controller。请问有没有好的方法,将这个判断session的设置为所有的Controller都起作用?
首先来看代码:
<code class="lang-php"><br>class UserController extends Controller {
public function filterIsSessionWrong($filterChain){
if (isset(Yii::app()->user->userId)&&(!empty(Yii::app()->user->userId))) {
$filterChain->run();
} else {
_echo(2, '用户id获取失败,您需要重新登录');
$this->redirect(array('user/login'));
}
}
public function filters() {
return array( 'IsSessionWrong - login,register', );
}
</code>由于客户端是手机。手机访问是通过session来访问的。当这个session不存在的时候,就告诉客户端需要重新登录一下(默认是10天)。
但是我这样做只能在UserController中间(除去注册与登录不需要判断外)去过滤。事实上所有的controller都要检验一下。如果都要检验一下的话,我不得不将这一段代码复制到所有的controller。请问有没有好的方法,将这个判断session的设置为所有的Controller都起作用?
你可以定义一个filter继承自CFilter,
<code class="lang-php">class SessionCheckFilter extends CFilter {
protected function preFilter($filterChain) {
if (isset(Yii::app()->user->userId) && (!empty(Yii::app()->user->userId))) {
$filterChain->run();
} else {
_echo(2, '用户id获取失败,您需要重新登录');
$this->redirect(array('user/login'));
}
}
}
</code>然后在你的controller中通过 filters 方法使用
<code class="lang-php">class UserController extends Controller {
public function filters() {
return array(
array('application.filters.SessionCheckFilter - edit, create')
);
}
}
</code>
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号