>  기사  >  백엔드 개발  >  PHP 세션이 손실되는 이유는 무엇입니까?

PHP 세션이 손실되는 이유는 무엇입니까?

藏色散人
藏色散人원래의
2021-03-01 09:23:413318검색

PHP 세션이 손실되는 이유는 다음과 같습니다. 1. 클라이언트에서 쿠키가 비활성화되었습니다. 2. 브라우저가 쿠키에 액세스할 수 없습니다. 3. php.ini의 "session.use_trans_sid=0"이 "--enable-trans"로 설정되어 있지 않습니다. -" 컴파일 중. sid" 옵션.

PHP 세션이 손실되는 이유는 무엇입니까?

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

작성자님이 실수로 웹사이트 세션이 항상 끊겼다고 하셔서 오랫동안 검색을 해보았으나 결국 서버 시간이 일치하지 않는다는 것을 알게 되었습니다. 네트워크 시간으로 인해 사용자가 즉시 로그인하거나 로그인 및 로그아웃할 수 없게 되었습니다. 그 과정에서 다른 이유가 있을 수 있다는 사실을 발견했으며, 이를 여기에서 보여드리고 여러분과 공유하겠습니다.

일반적으로 다음 요인으로 인해 SESSION이 손실됩니다.

1. 클라이언트에서 쿠키가 비활성화되었습니다.

2 브라우저가 php.ini에서 session.use_trans_sid=0에 액세스할 수 없습니다. –enable-trans-sid 옵션은 컴파일 시 활성화되지 않습니다. 세션은 서버측에 저장됩니다. (기본적으로 파일에 저장됩니다.) 클라이언트가 제공한 세션 ID를 기반으로 사용자의 파일을 가져옵니다. 세션 ID는 클라이언트의 쿠키를 이용하거나 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를 저장하고 페이지 간 프로세스 중에 수동으로 호출합니다.

【추천 학습: "

PHP 비디오 튜토리얼

"】

위 내용은 PHP 세션이 손실되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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