서문 이 문서는 주로 "Yii2가 도메인 간 SSO 로그인 분석을 구현하는 방법"에 대한 개선 사항입니다. 해당 기사에서는 이미 SSO 로그인의 기본 구현 프로세스를 작성했으며 이제 이를 더욱 최적화하겠습니다. 두 가지 주요 최적화 포인트가 있습니다. 1. www.XXX.com 로그인 상태 페이지의 주소 표시줄에 login.XXX.com을 입력하면 로그인 페이지로 돌아가지만 로그아웃은 되지 않고 www를 입력합니다. .XXX.com 언제"/> 서문 이 문서는 주로 "Yii2가 도메인 간 SSO 로그인 분석을 구현하는 방법"에 대한 개선 사항입니다. 해당 기사에서는 이미 SSO 로그인의 기본 구현 프로세스를 작성했으며 이제 이를 더욱 최적화하겠습니다. 두 가지 주요 최적화 포인트가 있습니다. 1. www.XXX.com 로그인 상태 페이지의 주소 표시줄에 login.XXX.com을 입력하면 로그인 페이지로 돌아가지만 로그아웃은 되지 않고 www를 입력합니다. .XXX.com 언제">
data-id="1190000004999380" data-licence="">
서문
이 기사는 주로 "Yii2가 도메인 간 SSO 로그인 분석을 구현하는 방법"에 대한 개선 사항입니다. SSO 로그인의 기본 구현 프로세스를 작성했으며 이제 이를 더욱 최적화해 보겠습니다. 두 가지 주요 최적화 포인트가 있습니다. 1. www.XXX.com 로그인 상태 페이지의 주소 표시줄에 login.XXX.com을 입력하면 로그인 페이지로 돌아가지만 로그아웃은 되지 않고 www를 입력합니다. .XXX.com 시간이면 www.XXX.com 페이지로 돌아가 로그인 상태를 유지합니다. 2. 세션 만료 시간을 수정하고 최대값으로 설정합니다.
요구사항 분석
1. login.XXX.com을 입력하면 로그인 인터페이스로만 돌아가고 로그인은 종료되지 않습니다. .
2. 영구 로그인 상태를 획득하세요. 로그아웃을 클릭하지 않는 한 로그인 상태는 유지됩니다.
코드 분석
1. 로그인 모듈 SiteController.php의 로그인 방법 수정
1.1. 수정 전 코드
<code>public function actionLogin() { $URL=Yii::$app->request->get('redirectURL'); $model = new LoginForm(); if (!\Yii::$app->user->isGuest) { $this->actionLogout();//退出登陆 return $this->redirect('http://'.DOMAIN_LOGIN.'?redirectURL=http://'.DOMAIN_HOME); } if ($model->load(Yii::$app->request->post()) && $model->login()) { if(empty($URL)){ return $this->redirect('http://'.DOMAIN_HOME,301); }else{ return $this->redirect($URL,301); } // return $this->goBack(); } else { return $this->renderPartial('login', [ 'model' => $model, ]); } }</code>
1.2.
<code> public function actionLogin() { $URL=Yii::$app->request->get('redirectURL'); $URL1='http://'.DOMAIN_CRM; $URL2='http://'.DOMAIN_HR; $URL3='http://'.DOMAIN_ADMIN; $URL4='http://'.DOMAIN_OA; $redirectURL1='http://'.DOMAIN_LOGIN.'?redirectURL=http://'.DOMAIN_CRM; $redirectURL2='http://'.DOMAIN_LOGIN.'?redirectURL=http://'.DOMAIN_HR; $redirectURL3='http://'.DOMAIN_LOGIN.'?redirectURL=http://'.DOMAIN_ADMIN; $redirectURL4='http://'.DOMAIN_LOGIN.'?redirectURL=http://'.DOMAIN_OA; $model = new LoginForm(); //验证是否已登录,非空为登录 if (!\Yii::$app->user->isGuest) { if(!empty($URL)){ $this->actionLogout();//退出登陆 if($URL==$URL2){ return $this->redirect($redirectURL2); }elseif($URL==$URL3){ return $this->redirect($redirectURL3); } if($URL==$URL4){ return $this->redirect($redirectURL4); } return $this->redirect($redirectURL1); }else{ //redirectURL不存在时,提交表单判断 if(DOMAIN_LOGIN){ if ($model->load(Yii::$app->request->post()) && $model->login()) { if(empty($URL)){ return $this->redirect($URL1,301); }else{ if($URL==$URL2){ return $this->redirect($URL2,301); }elseif($URL==$URL3){ return $this->redirect($URL3,301); } if($URL==$URL4){ return $this->redirect($URL4,301); } return $this->redirect($URL1,301); } } else { return $this->renderPartial('login', [ 'model' => $model, ]); } }else{ return $this->goHome(); //与之前的代码主要的区别在这里,登陆就让它回到登陆页面。 } } } else { //redirectURL存在时,提交表单判断 if ($model->load(Yii::$app->request->post()) && $model->login()) { if(empty($URL)){ return $this->redirect($URL1,301); }else{ if($URL==$URL2){ return $this->redirect($URL2,301); }elseif($URL==$URL3){ return $this->redirect($URL3,301); } if($URL==$URL4){ return $this->redirect($URL4,301); } return $this->redirect($URL1,301); } } else { return $this->renderPartial('login', [ 'model' => $model, ]); } } }</code>
2. 세션 만료 시간을 수정하고 최대값으로 설정합니다.
commonconfigmain.php
2.1.수정 전 코드
<code>'session' => [ 'cookieParams' => ['domain' => '.' . DOMAIN, 'lifetime' => 0], 'timeout' => 3600, ],</code>
2.2.수정 후 코드
<code>'session' => [ 'cookieParams' => ['domain' => '.' . DOMAIN, 'lifetime' => 0], 'timeout' => 7200, ],</code>
FAQ
1. 만료시간은 최대값으로 설정되어 있고, 쿠키는 로그인 성공 후에도 값을 가지고 있습니다. 그런데 로그인 후 약 2시간이 지나면 계속 로그아웃됩니다. 이유는 무엇인가요? Yii2에서 실제 영구 로그인을 달성하는 방법은 전문가에게 설명을 요청하고 싶습니다. 앞으로 문제가 해결되면 계속 업데이트하고 함께 진행하겠습니다.
관련 정보
Yii2 구성 크로스 도메인 로그인 인스턴스: http://www.kuitao8.com/20150507/3735.shtml
Yii2 자동으로 이동하도록 리디렉션을 사용하는 방법 외부 페이지 스탠드? :https://segmentfault.com/q/1010000002549004
전체 내용이 완성되었습니다. 부족한 점이나 더 좋은 방법이 있으면 모두 함께 의견을 나누고 소통해 보세요.
위 내용은 sso 및 yii의 내용을 포함하여 Yii2 도메인 간 SSO 로그인의 추가 최적화를 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.