大家。 我想阻止用户在登录后访问登录页面。 最好的方法是什么? 这是config / main / php
的代码return array(
'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
'name'=>'My Web',
'defaultController' => 'site/login')
和SiteContoller.php
public function actionLogin()
{
$model=new LoginForm;
// if it is ajax validation request
if(isset($_POST['ajax']) && $_POST['ajax']==='login-form')
{
echo CActiveForm::validate($model);
Yii::app()->end();
}
// collect user input data
if(isset($_POST['LoginForm']))
{
$model->attributes=$_POST['LoginForm'];
// validate user input and redirect to the previous page if valid
if($model->validate() && $model->login()){
$isAdmin = Yii::app()->user->getLevel() <=1; // or how you define admin in your case.
if ($isAdmin)
$this->redirect(array('user/view', 'id'=>Yii::app()->user->id));
else
//$id = Yii::app()->user->id;
$this->redirect(array('site/index'));
}
}
// display the login form
$this->render('login',array('model'=>$model));
}
在'defaultController'=>'site/login'
我还希望用户在关闭浏览器并重新打开后不访问登录页面。那可能吗?非常感谢
答案 0 :(得分:2)
你可以尝试这种方式,简单。
public function actionLogin()
{
if(!Yii::app()->user->isGuest)
{
$this->redirect(array('index'));
}
// rest of the codebelow.
}
答案 1 :(得分:1)
您可以定义访问规则并添加不同类型用户访问的URL。 例如:
class YourController extends Controller {
public function filters() {
return array(
'accessControl', // perform access control for CRUD operations
);
}
/**
* Specifies the access control rules.
* This method is used by the 'accessControl' filter.
* @return array access control rules
*/
public function accessRules() {
return array(
array('allow', // allow all users to perform 'index' and 'view' actions
'actions' => array('index', 'view'),
'users' => array('*'),
),
array('allow', // allow Only logged in user's to delete and update
'actions' => array('delete', 'update'),
'users' => array('*'),
),
array('deny', // deny all users
'users' => array('*'),
),
);
}
这是在Yii中使用的最好,最简单和最合适的方法..
答案 2 :(得分:0)
使用Sessions可以实现这一点。您要做的是启动运行在代码顶部的会话。如果您曾引用过登录或未登录的用户,则可能需要在代码的其他部分中包含此内容。
$sid = $session_id();
if(isset($sid)){
//session exists
} else {
start_session();
}
在此之后,您将需要添加会话条目以跟踪您是否有登录用户。我建议您在确认用户已登录后执行此操作:
// collect user input data
if(isset($_POST['LoginForm']))
{
$model->attributes=$_POST['LoginForm'];
// validate user input and redirect to the previous page if valid
if($model->validate() && $model->login()){
// store that the user is logged in
$this->session->set_userdata(array('loggedIn' => true));
$isAdmin = Yii::app()->user->getLevel() <=1; // or how you define admin in your case.
if ($isAdmin)
$this->redirect(array('user/view', 'id'=>Yii::app()->user->id));
else
//$id = Yii::app()->user->id;
$this->redirect(array('site/index'));
}
}
最后,您可以在进入表单处理之前检查代码,看看是否有人使用会话变量登录。如果是,您可以将它们发送到站点/索引或用户/视图,否则继续保持原样。
if(isset($this->session->userdata('loggedIn')){
//user is logged in, redirect away from this page
}
// else the user is not logged in and continue as normal
理想情况下,您可以使用以上三行加上session_start()代码来检查用户是否在任何页面上登录,这通常是实现私人/公共页面的好方法,同时也让人们关闭浏览器/页面,然后返回而不会被注销。