Yii 会话超时,但某些控制器仍然可以访问.如何将用户发送到登录页面


Yii session timed out but some controllers are still accessible. How to send the user to the login page

我正在使用 Yii 1.10,会话存在问题。如果一个登录的用户离开他的系统一段时间 Yii 检测到它并销毁会话,在这种情况下,用户应该无法访问任何控制器或任何控制器的任何操作。但就我而言,一些控制器仍然可以访问,它们向我显示结果。这不好。请建议我应该怎么做才能防止可访问性,我做错了什么请帮助我摆脱它。

如果你想用 yii 的方式做,你应该使用访问控制过滤器。它基本上检查当前用户是否可以访问请求的控制器操作。

对于简单的用例,它应该足够了。对于复杂情况,应使用 RBAC。您可以在此处获取有关如何在 yii 中使用 RBAC 的更多详细信息

你可以这样做:

在您的模块中.php

public function beforeControllerAction($controller, $action) {
        if (parent::beforeControllerAction($controller, $action)) {
            $controller->layout = 'admin_dashboard';
            if(empty(Yii::app()->session['admin_id']) || empty($_SESSION['admin_id'])){
                unset($_SESSION);
                Yii::app()->user->logout();
            }
            $route = strtolower ($controller->id . '/' . $action->id);
            //Add those page which not requires authentication like: 'action/controller',
            $publicPages = array(
            );
            if (Yii::app()->user->isGuest && !in_array($route, $publicPages)){
                Yii::app()->getModule('admin')->user->loginRequired();
            }
            else
            {
                return true;
            }
        } else
            return false;
    }