Php yii2在会话超时后将任何页面重定向到登录页面

Php yii2在会话超时后将任何页面重定向到登录页面,php,yii2,Php,Yii2,我想问一下在yii2中会话超时后将任何页面重定向到登录页面的问题,我尝试这样做 'user' => [ 'identityClass' => 'common\models\User', 'enableAutoLogin' => false, 'returnUrl' => 'index.php?r=site/login', 'identityCookie' =&g

我想问一下在yii2中会话超时后将任何页面重定向到登录页面的问题,我尝试这样做

        '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`
}