서문 이 문서는 주로 "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 언제">

>백엔드 개발 >PHP 튜토리얼 >Yii2 도메인 간 SSO 로그인 Livzon 포털 sso sso.dinghuo123 sso를 더욱 최적화합니다.

Yii2 도메인 간 SSO 로그인 Livzon 포털 sso sso.dinghuo123 sso를 더욱 최적화합니다.

WBOY
WBOY원래의
2016-07-29 08:52:072702검색

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 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.