首頁 後端開發 php教程 進一步優化Yii2跨域的SSO登陸 麗珠門戶sso sso.dinghuo123 sso

進一步優化Yii2跨域的SSO登陸 麗珠門戶sso sso.dinghuo123 sso

Jul 29, 2016 am 08:52 AM
sso yii

data-id="1190000004999380" data-licence="">

序言

本文主要是對「關於Yii2如何實現跨域的SSO登陸的解析」的改進,因為在那篇文章中我已經寫出了SSO登陸的基本實現過程,現在是進一步優化。主要優化的部分有兩點:一、在www.XXX.com登陸狀態的頁面網址列輸入login.XXX.com的時候回到登陸頁面,但並不退出登陸,再輸入www.XXX.com的時候,讓它又回到了www.XXX.com頁面並保持登陸的狀態;二、修改session的過期時間,設定到極大值。

需求分析

1、輸入login.XXX.com只是讓它回到登陸的介面,但並不會退出登陸,session和cookie的值還是保存著的。
2、實現永久登陸狀態。只要不點擊退出登陸,就一直保持登陸狀態。

程式分析

1、對login模組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、修改session的過期時間,設定到極大期值。
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>
登入後複製

常見問題

1、雖然session的過期時間已經設定了極大值,登陸成功cookie也有值了,但是大約有值了,但是登陸後大約有值了,但是大約登陸了過兩個小時左右還是會退出登陸,為何會這樣? Yii2如何實現真正的永久登陸,還請大牛們解答,後續要是我解決了也會繼續更新,一同進步。

相關資料

Yii2 設定 跨網域登入實例:http://www.kuitao8.com/20150507/3735.shtml
Yii2 如何利用redirect讓頁面自動跳到外站? :https://segmentfault.com/q/1010000002549004

全文完,如有不足或更好的方式方法,歡迎大家踴躍提出,我們一起互相交流學習。

以上就介紹了進一步優化Yii2跨域的SSO登陸,包括了sso,yii方面的內容,希望對PHP教程有興趣的朋友有所幫助。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用PHP實現高效穩定的SSO單一登錄 如何使用PHP實現高效穩定的SSO單一登錄 Oct 15, 2023 pm 02:49 PM

如何使用PHP實現高效穩定的SSO單一登錄

PHP中的OAuth:建構一個多平台SSO解決方案 PHP中的OAuth:建構一個多平台SSO解決方案 Jul 28, 2023 pm 09:38 PM

PHP中的OAuth:建構一個多平台SSO解決方案

php如何使用Yii3框架? php如何使用Yii3框架? May 31, 2023 pm 10:42 PM

php如何使用Yii3框架?

如何使用PHP框架Yii開發一個高可用的雲端備份系統 如何使用PHP框架Yii開發一個高可用的雲端備份系統 Jun 27, 2023 am 09:04 AM

如何使用PHP框架Yii開發一個高可用的雲端備份系統

Yii2 vs Phalcon:哪個框架更適合開發顯示卡渲染應用? Yii2 vs Phalcon:哪個框架更適合開發顯示卡渲染應用? Jun 19, 2023 am 08:09 AM

Yii2 vs Phalcon:哪個框架更適合開發顯示卡渲染應用?

Symfony vs Yii2:哪個框架比較適合開發大型Web應用? Symfony vs Yii2:哪個框架比較適合開發大型Web應用? Jun 19, 2023 am 10:57 AM

Symfony vs Yii2:哪個框架比較適合開發大型Web應用?

Yii框架中的資料查詢:有效率地存取數據 Yii框架中的資料查詢:有效率地存取數據 Jun 21, 2023 am 11:22 AM

Yii框架中的資料查詢:有效率地存取數據

yii如何將物件轉換為陣列或直接輸出為json格式 yii如何將物件轉換為陣列或直接輸出為json格式 Jan 08, 2021 am 10:13 AM

yii如何將物件轉換為陣列或直接輸出為json格式

See all articles