Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Yii会话超时,但仍可以访问某些控制器。如何将用户发送到登录页面_Php_Session_Yii_Yii Components - Fatal编程技术网

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

Php Yii会话超时,但仍可以访问某些控制器。如何将用户发送到登录页面,php,session,yii,yii-components,Php,Session,Yii,Yii Components,我使用的是Yii 1.10,但该会话存在问题。如果登录的用户离开其系统一段时间,Yii会检测到该系统并销毁会话, 在这种情况下,用户不能访问任何控制器或任何控制器的任何操作。 但在我的例子中,一些控制器仍然可以访问,并且它们正在向我显示结果。这不好。 请建议我应该做些什么来阻止访问,我做错了什么,请帮助我摆脱它。如果你想用yii的方式做,你应该使用。它主要检查当前用户是否有权访问请求的控制器操作 对于简单的用例,它应该足够了。对于复杂的情况,应该使用RBAC。您可以获得有关如何在yii中使用RB

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

如果你想用yii的方式做,你应该使用。它主要检查当前用户是否有权访问请求的控制器操作


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

在Module.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;
    }

您目前正在做什么来防止使用控制器/操作。你在检查用户是否仍然登录吗?@Evil\u skunk如果我每次都开始检查会话,那么我需要在每次操作中检查会话,以检查用户是否登录。我想签入控制器类,或者签入一次,