2014-04-02 4 views
0

나는 매우 이상한 문제에 직면 해있다. 내 응용 프로그램에서 CasLogin을하고있다. CAS를 성공적으로 구현했다. 즉, 모든 유효한 값과 성공한 로그인 후에 $ _SESSION 변수에 모든 값이 설정되지만, 인덱스 작업에 CasLogin() 액션 $ _SESSION에는 아무 것도 포함되어 있지 않습니다. 저는 Yii Frame Work를 사용하고 있습니다.리디렉션 후에 PHP 세션이 파괴됩니까?

여기에 코드가 있습니다.

public function actionCasLogin($CID=NULL) 
{ 
    //code to be imported from GMS here 
    PhpCasControl::setPhpCasContext($CID); 
    phpCAS::setPostAuthenticateCallback(array($this,'_saveServiceTkt')); 
    $loginForm = new CasLoginForm; 
    // validate user input and redirect to the previous page if valid 

    if ($loginForm->login($CID)) { 

     if (Yii::app()->user->isGuest){ 
      echo '<br> <br> This shows up..'; 
      var_dump($_SESSION); 
     } 
     else{ 
      echo 'Hello at caslogin <br>never shows up'; 
      var_dump(Yii::app()->user->id); 
     } 


     $this->redirect(array('index')); 

    } 
    else { 
     throw new Exception("You don't have sufficient permissions to access this service. Please contact Administrator !"); 
    } 
} 

이 함수는 제대로 작동하고 EXIT를 입력하면; 여기 여기 이 원하는 모든 값을 $ _SESSION을 표시합니다 .. 하지만 재 지정 후 ... 인덱스에 .. 그 코드는 이것이다 ..

public function actionIndex() 
{ 
    echo"hello at index"; 

    if (! Yii::app()->user->isGuest) { 
     //#CASE 1: User is already logged in 

     $this->redirect(array("site/upload")); 
    } 
    else{ 
     //#CASE 2: User is not Logged in 
     echo '<br>shows up with empty session<br>'; 
     var_dump($_SESSION); 
     var_dump(Yii::getVersion()); 
     exit; 
     $this->redirect(array("site/login")); 
    } 

} 

$ _SESSION은 ..

비어

왜 이런 일이 일어날 수 있는지 .. 나는 CAS가 서비스 티켓 이름으로 자체 세션을 만드는 것을 알고있다 .. 나는 CasameinForm ...에서 호출하는 RenameSession 함수에 의해 그 일을 처리했다. 코드는 다음과 같다. 이 ..

public function rename_session($newSessionId) { 
    //Store current session variables so that can be used later 
    $old_session = $_SESSION; 
    //Destroy current session 
    session_destroy(); 
    // set up a new session, of name based on the ticket 
    $session_id = preg_replace('/[^a-zA-Z0-9\-]/', '', $newSessionId); 
    //start session with session ID as 1) service ticket in case of CAS login, 2) random sTring in case of local login. 
    session_id($session_id); 
    session_start(); 

    //echo "<br>new session <br>"; 

    //Restore old session variables 
    $_SESSION = $old_session; 
    //var_dump($_SESSION); 
} 
+0

왜 세션 ID를 변경해야합니까? – Dinistro

+0

Yii는 자체 세션을 만들고 CAS는 서비스 티켓 ID가있는 세션을 만들어 동일한 세션을 가리 킵니다. 이드를 바꿔야 해. – Himanshu97

+0

하지만 아직도 세션을 다시 설정할 필요가 없습니다. 세션 값으로 cas-id를 추가 할 수 없습니까? – Dinistro

답변

0

확인을 위해 session_id을 사용하여 ID를 변경해야한다고 생각합니다.

public function rename_session($newSessionId) { 
    // set up a new session id, of name based on the ticket 
    session_id(preg_replace('/[^a-zA-Z0-9\-]/', '', $newSessionId)); 
} 
+0

사실, 그게 도움이 .. ..! 이유는 모르지만 모든 페이지에 session_start()를 넣어야합니다 ...! 심지어 세션 지속 시간 및 자동 시작 세션 설정이 도움이되지 않습니다. – Himanshu97

+0

모든 페이지에서 'session_start()'를 정상적으로 사용합니다. 그러나 이것은 처음에 있어야하며 기능에 있어서는 안됩니다. masterpaging을 사용하고 있다면 index.php 파일에 넣을 수 있습니다. – Dinistro

관련 문제