ホームページ >バックエンド開発 >PHPチュートリアル >Yii2 クロスドメイン SSO ログインをさらに最適化
この記事は主に「Yii2 がクロスドメイン SSO ログイン分析を実装する方法」を改良したものです。その記事ではすでに SSO ログインの基本的な実装プロセスを書いており、さらに最適化されています。最適化の主なポイントは 2 つあります。 1. www.XXX.com のログイン ステータス ページのアドレス バーに「login.XXX.com」と入力すると、ログイン ページに戻りますが、ログアウトせずに「www」と入力します。 .XXX.com の時間を変更すると、www.XXX.com ページに戻り、ログインしたままになります。 2. セッションの有効期限を変更し、最大値に設定します。
1.login.XXX.com を入力すると、ログイン インターフェイスに戻るだけで、セッションと Cookie の値は保存されます。 2. 永続的なログイン状態を実現します。クリックしてログアウトしない限り、ログインしたままになります。
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, ]); } }1.2. コードを変更した後
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, ]); } } }2. セッションの有効期限を変更する最大値まで。 ... ログインして 2 時間ほど経ってもログアウトしてしまうのはなぜですか?
Yii2 で真の永久ログインを実現する方法、いくつか答えてください
今後解決できたら、引き続き更新して一緒に進歩していきます。