>  기사  >  백엔드 개발  >  PHP가 세션을 통과할 수 없으면 어떻게 해야 합니까?

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

藏色散人
藏色散人원래의
2021-10-15 09:17:002054검색

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

64ea5879761d0da424e55171efd66465다음 페이지5db79b134e9f6b82c0b36e0489ee08ed " ;
에코 ​ $url ;                                      ?>


051b856c4c0fb7fdd076e794b7fe333b

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


위의 1번 방법입니다.

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

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

s1.php


8a3b08d48dc0863597894228c5edba87다음 페이지5db79b134e9f6b82c0b36e0489ee08ed " ;
에코 ​ $url ;                                      ?>


s2.php 방법 3: login.html

d8ba9ae6ed939cfc988eeba3dd452013  

 

12c5e4af69c94f303ef26ef848ab15ae        
  9d13718681daf8cf3b3b09efccb6c25a0dd0cd570573c6c1fdcce27bf1c3d71c               

    b9cb42eb18117449ae43e9c5871ca28d   로그인   76d873cfd4f7e4761b698ebf60e6fd52                                                   
  619f1dd9d7b61ccabba85fe0fb902735  
  6d43169732433cef921c92eab2f2c253                                                                
  1f8c22a195319369dda28f0940dd673d    설명:                                             
  efe26173daba84a84379e453200f4da5                                                 
사용명   :8f5425e15fede76dbafbd3a16d20a42d2cd52db9b797f2c7ecc9db34e8bbc4a4                              
구 令   :819b702b0ea968f4d3902c854adce4b02cd52db9b797f2c7ecc9db34e8bbc4a4                          
  bf339c3dcb1a824965f92358610dd8f7                                      
  1bb8154cb0340a81cbe364f8366f64bd                                                                
  e572e3519a9cac52c5615f72d66e4ddc                                                                
  cce74267b188e714aa4f597721115885      

 

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

220ee49e3afea649279b50e1efac2300

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

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

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

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

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

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