PHP가 세션을 통과할 수 없으면 어떻게 해야 합니까?

藏色散人
풀어 주다: 2023-03-13 10:06:02
원래의
2056명이 탐색했습니다.

PHP가 세션을 전송할 수 없는 문제에 대한 해결 방법: 1. 클라이언트에서 쿠키를 활성화합니다. 2. 브라우저 문제를 확인하고 쿠키에 액세스합니다. 3. php.ini에서 session.use_trans_sid를 활성화합니다.

PHP가 세션을 통과할 수 없으면 어떻게 해야 합니까?

이 문서의 운영 환경: Windows 7 시스템, PHP 버전 7.1, DELL G3 컴퓨터

PHP에서 SESSION을 페이지 간에 전달할 수 없는 문제에 대한 솔루션

PHP에서 SESSION 사용 SESSION 변수를 페이지 간에 전달할 수 없는 문제가 발생할 수 있습니다. 이 문제로 며칠 동안 고민하다가 결국 정보를 찾아보며 고민하고 해결했습니다. 이 문제의 원인은 다음과 같습니다.
1. 클라이언트에서 쿠키가 비활성화되었습니다.
2. 브라우저에 문제가 있어 일시적으로 쿠키에 액세스할 수 없습니다.
3. php.ini에서 session.use_trans_sid = 0 또는 컴파일할 때 --enable-trans-sid 옵션이 켜져 있지 않습니다

왜 이런 일이 발생하나요? 아래에 설명하겠습니다.

세션은 서버 측에 저장됩니다(세션은 기본적으로 파일로 저장됩니다). 클라이언트가 제공한 세션 ID에 따라 사용자의 파일을 가져오고 변수의 값을 가져옵니다. 세션 ID는 클라이언트의 Cookie 또는 Http1.1을 사용할 수 있습니다. 프로토콜의 Query_String(즉, 접속한 URL의 "?" 뒤에 오는 부분)을 서버로 보낸 후 서버는 Session 디렉터리를 읽습니다. 즉, 세션 ID는 서비스에 저장된 세션 변수를 가져오는 ID 카드입니다. session_start(); 코드를 실행하면 서버에 세션 파일이 생성되고, 이에 해당하는 고유한 세션 ID가 생성되며, 방금 생성된 세션 파일에 특정 형식으로 저장되도록 정의되어 있습니다. 세션 ID를 통해 정의된 변수를 검색할 수 있습니다. 페이지를 넘은 후 세션을 사용하려면 session_start()를 다시 실행해야 합니다. 다른 세션 파일이 생성되고 그에 따라 해당 세션 ID가 생성됩니다. 이 세션 ID를 사용하면 언급된 첫 번째 세션 파일을 검색할 수 없습니다. 이 세션 ID는 세션을 여는 "키"가 아니기 때문입니다. session_start(); 앞에 session_id($session id); 코드를 추가하면 새로운 세션 파일이 생성되지 않고, 이 id에 해당하는 세션 파일을 직접 읽어옵니다.
PHP의 세션은 기본적으로 클라이언트의 쿠키를 사용하여 세션 ID를 저장하므로 클라이언트의 쿠키에 문제가 있을 경우 세션에 영향을 미치게 됩니다. 세션이 반드시 쿠키에 의존할 필요는 없다는 점에 유의해야 합니다. 이는 쿠키에 비해 세션이 뛰어난 점이기도 합니다. 클라이언트의 쿠키가 비활성화되거나 문제가 있는 경우 PHP는 자동으로 세션 ID를 URL에 첨부하므로 세션 변수는 세션 ID를 통해 여러 페이지에서 사용할 수 있습니다. 그러나 이 첨부 파일에는 "php.ini의 session.use_trans_sid = 1이거나 컴파일 중에 --enable-trans-sid 옵션이 켜져 있습니다"라는 특정 조건도 있습니다.

위의 원칙을 이해했다면 이제 쿠키를 제쳐두고 세션을 사용해 보겠습니다. 세 가지 주요 방법이 있습니다:

1. php.ini에서 session.use_trans_sid = 1을 설정하거나 컴파일 옵션 중에 --enable-trans-sid를 설정합니다. PHP가 자동으로 페이지 전체에 걸쳐 세션 ID를 전달하도록 합니다.
2. URL을 통해 수동으로 값을 전달하고 숨겨진 양식을 통해 세션 ID를 전달합니다.
3. 파일, 데이터베이스 등에 session_id를 저장하고 페이지 간 프로세스 중에 수동으로 호출합니다.

예를 들어 설명하겠습니다:

s1.phps2.php

세션_시작 ();                                  $_SESSION [ ' var1 ' ] = " 중화인민공화국 " ; $url = " 다음 페이지 " ;
에코 ​ $url ;                                      ?>


세션_시작 ();                                          에코 ​ " 전달된 세션 변수 var1의 값은 다음과 같습니다. " . $_SESSION [ ' var1 ' ];
?>

위 코드를 실행하면 클라이언트 쿠키가 정상이면 "중화인민공화국"이라는 결과를 얻을 수 있습니다.
이제 클라이언트에서 쿠키를 수동으로 닫았다가 다시 실행하면 결과를 얻지 못할 수도 있습니다. 결과를 얻을 수 없는 경우 "php.ini에서 session.use_trans_sid = 1을 설정하거나 컴파일할 때 --enable-trans-sid 옵션을 설정"하면 "중화인민공화국"이라는 결과를 얻게 됩니다


위의 1번 방법입니다.

아래 접근 방식 2에 대해 이야기해 보겠습니다.

수정된 코드는 다음과 같습니다.

s1.php


세션_시작 ();                                       $_SESSION [ ' var1 ' ] = " 중화인민공화국 " ;                           $sn ​ = ​ 세션_ID ();                                       $url = " 다음 페이지 " ;
에코 ​ $url ;                                      ?>


s2.php 방법 3: login.html

  세션_ID   (   $_GET   [   '   에스   '   ]);                              
  세션_시작   ();                                     
  에코       "   传递의 세션수는 var1의 值为:   "   .   $_SESSION   [   '   var1   '   ]; 
  ?>  

 

       
  <   HTML   ><   머리   >               

    <   제목   >   로그인                                                     
  <   메타 http   -   동등한   =   "   콘텐츠 유형   "    콘텐츠   =   "   텍스트/html; 문자셋=GB2312   "   >  
                                                                 
  <   몸   >    설명:                                             
  <   양식 이름   =   "   로그인   "    방법   =   "   우편   "       

   액션   =   "   mylogin1.php   "   >                                                 
사용명   :<   입력 유형   =   "   텍스트   "    이름   =   "   이름   "   ><   br   >                              
구 令   :<   입력 유형   =   "   비밀번호   "    이름   =   "   통과하다   "   ><   br   >                          
  <   입력 유형   =   "   제출하다   "    값   =   "   登录   "   >                                      
                                                                 
                                                                 
       

 

mylogin1.php

<?   php

   $name   =   $_POST   [   &#39;   name   &#39;   ];
   $pass   =   $_POST   [   &#39;   pass   &#39;   ];
   if   (   !   $name       ||       !   $pass   ) {
   echo       "   用户名或密码为空,请<a href="login.html">重新登录</a>   "   ;
   die   ();
}
   if    (   !   (   $name   ==   "   laogong   "       &&       $pass   ==   "   123   "   )) {
   echo       "   用户名或密码不正确,请<a href="login.html">重新登录</a>   "   ;
   die   ();
}
   //   注册用户  
   ob_start   ();
   session_start   ();
   $_SESSION   [   &#39;   user   &#39;   ]   =       $name   ;
   $psid   =   session_id   ();
   $fp   =   fopen   (   "   e:/tmp/phpsid.txt   "   ,   "   w+   "   );
   fwrite   (   $fp   ,   $psid   );
   fclose   (   $fp   );
   //   身份验证成功,进行相关操作  
   echo       "   已登录<br>   "   ;
   echo       "   <a href="mylogin2.php">下一页</a>   "   ;

   ?>
로그인 후 복사

mylogin2.php

$fp = fopen ( " e:/tmp/phpsid.txt " , " 아르 자형 " );
$sid = 프레드 ( $fp , 1024 );
fclose ( $fp );
세션_ID ( $sid );
세션_시작 ();
만약에 ( isset ( $_SESSION [ ' 사용자 ' ]) && ​ $_SESSION [ ' 사용자 ' ] = " 라오공 " ) {
에코 ​ " 이미 로그인되어 있습니다! " ;
}
또 다른 {
// 관련 작업을 수행하려면 성공적으로 로그인하십시오.
에코 ​ " 로그인되지 않았습니다. 접근 권한이 없습니다. " ;
에코 ​ " 탐색하려면 로그인하세요. " ;
주사위 ();
}

?>

또한 쿠키 테스트를 꺼주세요. 사용자 이름: laogong 비밀번호: 123 이는 파일을 통해 세션 ID를 저장하는 것입니다. 파일은 다음과 같습니다: e:/tmp/phpsid.txt. 파일 이름이나 경로를 원하는 대로 결정하세요. 체계.

데이터베이스 방식은 따로 예를 들지 않겠습니다. 파일 방식과 비슷합니다.

요약하자면, 위의 방법들은 한 가지 공통점이 있는데, 이전 페이지에서 세션 ID를 가져온 후 다음 페이지로 전달하는 방법을 찾는 것입니다. session_start(); 코드는 다음 페이지에 있습니다. );

추천 학습: "PHP 비디오 튜토리얼"

위 내용은 PHP가 세션을 통과할 수 없으면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿