Php yii2在会话超时后将任何页面重定向到登录页面
我想问一下在yii2中会话超时后将任何页面重定向到登录页面的问题,我尝试这样做Php yii2在会话超时后将任何页面重定向到登录页面,php,yii2,Php,Yii2,我想问一下在yii2中会话超时后将任何页面重定向到登录页面的问题,我尝试这样做 'user' => [ 'identityClass' => 'common\models\User', 'enableAutoLogin' => false, 'returnUrl' => 'index.php?r=site/login', 'identityCookie' =&g
'user' => [
'identityClass' => 'common\models\User',
'enableAutoLogin' => false,
'returnUrl' => 'index.php?r=site/login',
'identityCookie' => [
'name' => '_backendIdentity',
],
],
'session' => [
'name' => 'BACKENDSESSID',
'savePath' => __DIR__ . '/../runtime',
],
但当我在index.php页面时,它会返回到登录页面,如果我转到另一个操作并且会话超时,它会返回
PHP通知–yii\base\ErrorException
正在尝试获取非对象的属性
请帮助我您可以在操作前检查条件:如果用户登录或未登录:
public function beforeAction($action){
if (Yii::$app->user->isGuest){
return $this->redirect(['site/login'])->send(); // login path
}
}
请在config/main.php文件中使用会话和超时,如下所示:
'components' => [
'user' => [
'identityClass' => 'common\models\User',
'enableAutoLogin' => true,
'authTimeout' => 3600*4, // auth expire 4 hours
],
'session' => [
'class' => 'yii\web\Session',
'cookieParams' => ['httponly' => true, 'lifetime' => 3600*4],
'timeout' => 3600*4, //session expire 4 hours
'useCookies' => true,
],
],
//and in this beforeRequest give actions that can be accessed by guest user.
'as beforeRequest' => [
'class' => 'yii\filters\AccessControl',
'rules' => [
[
'allow' => true,
'actions' => ['login', 'error', 'forgotpassword', 'resetpassword'],
],
[
'allow' => true,
'roles' => ['@'],
],
],
],
尝试行为
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'rules' => [
[
'actions' => ['youraction'],
'allow' => true,
'roles' => ['@'], // you can use matchCallback to create more powerful check
],
],
],
];`enter code here`
}
由于未定义用户,因此出现此错误。如果有人未登录,是否要重定向到登录页面?您必须为每个需要登录的操作设置
AccessControl
过滤器。尝试阅读此@Sfili_81是的,我希望它重定向回登录page@MichalHynčica在控制器上设置访问控制?如果我这样做,我必须在每个控制器行为中正确设置我的控制器。如果你不知道怎么做,你可以在这里阅读:如果有帮助,请标记你是否可以,谢谢,让我先试试。或者创建一个控制器并从该控制器扩展所有。你能帮我介绍一下从该控制器扩展所有的方法吗?这意味着我需要创建另一个具有此函数的控制器n将所有控制器扩展到该函数,对吗?
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'rules' => [
[
'actions' => ['youraction'],
'allow' => true,
'roles' => ['@'], // you can use matchCallback to create more powerful check
],
],
],
];`enter code here`
}