首先来看代码:
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', ); }
由于客户端是手机。手机访问是通过session来访问的。当这个session不存在的时候,就告诉客户端需要重新登录一下(默认是10天)。
但是我这样做只能在usercontroller中间(除去注册与登录不需要判断外)去过滤。事实上所有的controller都要检验一下。如果都要检验一下的话,我不得不将这一段代码复制到所有的controller。请问有没有好的方法,将这个判断session的设置为所有的controller都起作用?
回复内容: 首先来看代码:
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', ); }
由于客户端是手机。手机访问是通过session来访问的。当这个session不存在的时候,就告诉客户端需要重新登录一下(默认是10天)。
但是我这样做只能在usercontroller中间(除去注册与登录不需要判断外)去过滤。事实上所有的controller都要检验一下。如果都要检验一下的话,我不得不将这一段代码复制到所有的controller。请问有没有好的方法,将这个判断session的设置为所有的controller都起作用?
你可以定义一个filter继承自cfilter,
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')); } }}
然后在你的controller中通过 filters 方法使用
class usercontroller extends controller { public function filters() { return array( array('application.filters.sessioncheckfilter - edit, create') ); }}
