>백엔드 개발 >PHP 문제 >여러 페이지에서 PHP 세션이 손실되면 어떻게 해야 할까요?

여러 페이지에서 PHP 세션이 손실되면 어떻게 해야 할까요?

藏色散人
藏色散人원래의
2020-09-29 09:14:592014검색

PHP 세션의 페이지 간 손실에 대한 솔루션: 먼저 페이지 상단에 "session_start();"를 배치한 다음 세션 자동 시작을 구성하거나 수동으로 세션을 시작합니다.

여러 페이지에서 PHP 세션이 손실되면 어떻게 해야 할까요?

추천: "PHP 동영상 튜토리얼"

오늘은 이전 세션에 대한 탐색이라고 볼 수 있는 사용자 로그인 판단을 구현하기 위해 세션을 사용하고 싶습니다. 세션의 운영 메커니즘은 다음과 같습니다:

 Session은 서버 측의 세션 메커니즘입니다. 클라이언트가 서버에 세션 생성을 요청하면 서버는 먼저 요청에 고유한 세션 ID가 포함되어 있는지 여부를 감지합니다. 이는 서버가 사용자에 대한 세션을 이미 생성했음을 의미합니다. sessionID는 사용자가 사용할 사용자의 세션을 검색합니다. sessionID가 없으면 서버는 사용자에 대한 고유한 sessionID를 사용하여 새 세션을 생성합니다. 생성이 완료되면 세션 ID가 서버에 의해 클라이언트에 반환되고 클라이언트에 로컬로 저장됩니다.

세션 ID를 저장하는 일반적인 메커니즘은 쿠키이지만 쿠키는 인위적으로 금지될 수 있으므로 쿠키가 금지된 후에도 일반적으로 URL 재작성을 통해 세션을 통해 세션을 계속 수행할 수 있는지 확인해야 합니다. http ://...../xxx;jsessionid= ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764 형식이고, 다른 하나는 http://..... 형식으로 URL 끝에 추가되는 쿼리 문자열입니다. /xxx?jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZ cEbzWoWiBYEnLerjQ99zWpBng! -145788764 사용자에게는 이 두 가지 방법 사이에 차이가 없지만, 첫 번째 방법을 사용하면 세션 ID 정보를 일반 프로그램 매개변수와 구별하는 데에도 도움이 됩니다.
전체 상호작용 전반에 걸쳐 상태를 유지하려면 클라이언트가 요청할 수 있는 모든 경로 뒤에 이 세션 ID가 포함되어야 합니다.

세션 무효화에 대한 또 다른 오해:

세션 메커니즘에 관해 이야기할 때 "브라우저를 닫으면 세션이 사라집니다."라는 오해를 자주 듣습니다. 실제로 회원카드의 예를 생각해 보면 고객이 매장에 적극적으로 카드 취소를 요청하지 않는 이상 매장에서는 결코 고객의 정보를 쉽게 삭제하지 않습니다. 세션의 경우에도 마찬가지입니다. 프로그램이 서버에 세션 삭제를 알리지 않는 한, 서버는 일반적으로 사용자가 로그오프할 때 세션을 삭제하라는 명령을 보냅니다. 그러나 브라우저는 서버가 닫히기 전에 서버가 닫힐 것임을 적극적으로 알리지 않으므로 서버는 브라우저가 닫혔음을 알 기회가 없습니다. 이러한 착각이 일어나는 이유는 대부분의 세션 메커니즘이 세션 쿠키를 사용하여 세션 ID를 저장하기 때문입니다. , 브라우저를 닫으면 세션 ID가 사라지고, 서버에 다시 연결하면 원래 세션을 찾을 수 없습니다. 서버가 설정한 쿠키를 하드디스크에 저장하거나, 브라우저가 보낸 HTTP 요청 헤더를 어떤 방법으로 다시 써서 원래 세션 ID를 서버로 보내는 경우, 브라우저가 작동 중일 때에도 원래 세션을 찾을 수 있습니다. 다시 열었습니다.


브라우저를 닫아도 세션이 삭제되지 않고 서버가 강제로 세션 만료 시간을 설정하기 때문입니다. 클라이언트가 마지막으로 세션을 사용한 이후 시간이 이 만료 시간을 초과하는 경우. 시간이 지나면 서버는 클라이언트가 활동을 중지한 것으로 간주할 수 있으며 저장 공간을 절약하기 위해 세션이 삭제됩니다.

자, 말도 안되는 이야기를 많이 합시다. 세션 손실에 대한 해결책에 대해 이야기해 봅시다:

1. session_start()는 가능한 한 페이지 상단에 배치되어야 합니다. php.ini에 그런 것이 없으면 세션 자동 시작을 구성하는 경우 각 세션 전에 세션을 수동으로 열어야 합니다. session_start();

3 세션은 $_GET와 마찬가지로 PHP의 슈퍼 전역 변수입니다. , $_POST, $_SERVER이므로 대문자로 사용해야 합니다: $_SESSION['username']=$username;

4 페이지 간 전송 예: a.php 페이지는 $_SESSION['username']을 다음으로 전송합니다. b.php:

a.php:

<?php
session_start();$username=$_POST[&#39;username&#39;];$_SESSION[&#39;username&#39;]=$username;
?>
b.php

880e0a19df1d92babf7ec23ac9d82cda

위 내용은 여러 페이지에서 PHP 세션이 손실되면 어떻게 해야 할까요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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