はじめに この記事は主に「Yii2 がクロスドメイン SSO ログイン分析を実装する方法」を改良したものです。この記事では、SSO ログインの基本的な実装プロセスをすでに作成しました。ここで、それをさらに最適化します。最適化の主なポイントは 2 つあります。 1. www.XXX.com のログイン ステータス ページのアドレス バーに「login.XXX.com」と入力すると、ログイン ページに戻りますが、ログアウトせずに「www」と入力します。 .XXX.com の場合"/> はじめに この記事は主に「Yii2 がクロスドメイン SSO ログイン分析を実装する方法」を改良したものです。この記事では、SSO ログインの基本的な実装プロセスをすでに作成しました。ここで、それをさらに最適化します。最適化の主なポイントは 2 つあります。 1. www.XXX.com のログイン ステータス ページのアドレス バーに「login.XXX.com」と入力すると、ログイン ページに戻りますが、ログアウトせずに「www」と入力します。 .XXX.com の場合">
ホームページ >バックエンド開発 >PHPチュートリアル >Yii2 クロスドメイン SSO ログインをさらに最適化 Livzon ポータル sso sso.dinghuo123 sso
data-id="1190000004999380" data-licence="">
はじめに
この記事は主に「Yii2 がクロスドメイン SSO ログイン分析を実装する方法」を改良したものです。その記事では SSO についてすでに書いているためです。ログインのプロセスがさらに最適化されました。最適化の主なポイントは 2 つあります。 1. www.XXX.com のログイン ステータス ページのアドレス バーに「login.XXX.com」と入力すると、ログイン ページに戻りますが、ログアウトせずに「www」と入力します。 .XXX.com の時間を変更すると、www.XXX.com ページに戻り、ログインしたままになります。 2. セッションの有効期限を変更し、最大値に設定します。
要件分析
1.login.XXX.com を入力するとログイン インターフェイスに戻るだけで、セッションと Cookie の値は保存されません。
2. 永続的なログイン状態を実現します。クリックしてログアウトしない限り、ログインしたままになります。
コード分析
1. ログインモジュール SiteController.php の Login メソッドを変更します
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. セッションの有効期限は最大値に設定されていますが、ログインに成功した後も Cookie は値を持ちます。ログインについて 2 時間ほど経ってもログアウトされてしまいます。これはなぜですか? Yii2 で真の永久ログインを実現するにはどうすればよいですか? 今後問題が解決したら、専門家に説明してもらいたいと思います。
関連情報
Yii2 設定 クロスドメイン ログインの例: http://www.kuitao8.com/20150507/3735.shtml
Yii2 リダイレクトを使用して外部サイトに自動的にジャンプするにはどうすればよいですか? : https://segmentfault.com/q/1010000002549004
全文が完成しました。欠点やより良い方法があれば、ぜひ意見を出し合って互いに学びましょう。
上記では、sso と yii の内容を含め、Yii2 クロスドメイン SSO ログインのさらなる最適化について紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。