> 백엔드 개발 > PHP 튜토리얼 > PHP의 SESSION 메커니즘 이해

PHP의 SESSION 메커니즘 이해

不言
풀어 주다: 2023-03-24 06:28:01
원래의
1584명이 탐색했습니다.

이 글의 주요 내용은 PHP의 SESSION 메커니즘을 이해하는 것입니다. 이제 이를 여러분과 공유합니다. 도움이 필요한 친구들이 참고할 수 있습니다.




1. 기본 메커니즘은 디스크 파일을 사용하여 PHP 세션을 구현합니다. php.ini 구성: session.save_handler = files
 1.session_start()
  A.session_start ()은 세션 메커니즘의 시작 부분에는 특정 확률 가비지 수집 켜기,세션이 파일에 저장되기 때문에
   PHP 자체 가비지 수집이 유효하지 않습니다. SESSION 재활용에는 파일 삭제가 필요합니다. 이 확률은 php
.ini 구성에 따라 결정됩니다.
   그러나 일부 시스템은 세션
.gc_probability =0입니다. 즉, 확률은 0이지만 가비지 수집은 cron 스크립트를 통해 구현됩니다. session
=
1000      session.gc_maxlifetime =
1440/ /만료 시간의 기본값은 24분입니다.                                                   // 확률은 session.gc_probability/session.gc_pisor 결과 1 /1000,                   // 세션의 가비지 컬렉션에서는 각 파일의 만료 여부를 확인해야 하므로 너무 작게 설정하지 않는 것이 좋습니다. ​​​​​​​​​​​​​​​//이것은 임의의 계층적 저장소입니다. 그렇다면 가비지 수집이 작동하지 않으며 스크립트를 직접 작성해야 합니다
B. 세션은 현재 $_COOKIE[session_name()];

session_name
()이 있는지 확인합니다. session_id를 저장하는 COOKIE 키 값을 반환합니다.
이 값은 php
.ini

                                                      존재하지 않으면 session_id가 생성됩니다, 생성된 session_id는 COOKIE 값으로 클라이언트에 전달됩니다. .,
|| ||, 쿠키는 헤더로 전송됩니다. 이 전에 출력이 없습니다. + | >

.
cookie_domain, , 认 // 기본값은 비어 있습니다.
)
  D. 존재한다면 session_id =$_COOKIE[session_name];
    그런 다음 session
.save_path에서 지정한 폴더로 이동하여 이름을 찾습니다. ' SESS_ '.session_id() 파일 .
   파일 내용을 읽고 역직렬화한 후
$_SESSION

에 넣습니다.


2 값을 $_SESSION
 에 할당합니다. 예를 들어 새 값을 추가합니다.
$_SESSION['test'] =' blah'; 그러면 이 $_SESSION은 메모리에만 유지됩니다. 스크립트 실행이 끝나면
  
$_SESSION 값을 session_id 에 지정된 폴더에 쓰고 닫습니다. 관련 자료 .                                                                                                                                            ‐ session_id를 변경하는 데 사용할 수 있습니다.
Drupal의 익명 사용자는 로그인할 때 새로운 session_id를 사용해야 합니다
​​​​​​​

if (isset($_COOKIE[session_name()])) {
            setcookie(session_name(),'',time() -42000,'/');//旧session cookie过期
          }
          session_regenerate_id();//这一步会生成新的session_id
         //session_id()返回的是新的值
로그인 후 복사

​​​​​​​​​​​​​​​​​​​​​​​ 스크립트가 SESSION 쓰기 작업을 종료하면 실행됩니다.

$_SESSION에 값을 씁니다. session_id

라는 파일에 이미 존재할 수도 있습니다.

   새 파일을 만들어야 할 수도 있습니다.


 4. SESSION 삭제
  SESSION에서 보낸 COOKIE는 일반적으로 메모리에 저장되며 브라우저를 닫을 때 만료되는 인스턴트 쿠키입니다. 수동으로 만료를 강제해야 하는 경우
 예를 들면 다음과 같습니다. 브라우저를 닫는 대신 로그아웃한 다음 코드에서 SESSION을 삭제해야 합니다.
1, (), time() -8000000 ,...);//로그아웃하기 전에 실행하세요2 usset( $_SESSION. );
/ /새로 고침 후에는 $_SESSION 데이터가 모두 삭제되지만 COOKIE는 전달되지만 데이터는 없습니다. ㅋㅋ | 3에서는 COOKIE가 전송되지만 데이터를 찾을 수 없습니다 2. 세션 처리 메커니즘은 다음과 같습니다. 사용자가 맞춤화합니다. php.ini 구성: session.save_handler = user
사용자 정의 세션 처리 메커니즘, 더욱 직관적
*session_set_save_handler('open',close',' 읽어',' write','destroy','gc') 1
. session_start(), open($save_path
,$session_name)을 실행하여 세션 작업 핸들 $save_path
을 세션. save_handler =으로 엽니다. 파일의 경우 , 세션 입니다.save_path, 그러나 사용자가 이를 사용자 정의하면 이 두 매개변수는 사용되지 않고 TRUE를 직접 반환합니다​​​​​읽기 실행(

$id
) to read the data from it.// 이 매개변수는 session_id()에 자동으로 전달되며, 이 값을 통해 작동될 수 있습니다.
*2.스크립트 실행 종료 쓰기 실행($id
,$sess_data) // 두 개의 매개변수, 매우 간단함 *3.假如用户需要session_destroy()
先执行destroy
.在执行第2步

一个实际例子:

 //SESSION初始化的时候调用
      function open($save_path,$session_name)
      {
        global$sess_save_path;
        $sess_save_path=$save_path;
        return(true);
      }

      //关闭的时候调用
      function close()
      {
        return(true);
      }

      function read($id)
      {
        global$sess_save_path;
        $sess_file="$sess_save_path/sess_$id";
        return (string) @file_get_contents($sess_file);
      }
      //脚本执行结束之前,执行写入操作
      function write($id,$sess_data)
      {
        echo"sdfsf";
        global$sess_save_path;

        $sess_file="$sess_save_path/sess_$id";
        if ($fp= @fopen($sess_file,"w")) {
          $return=fwrite($fp,$sess_data);
          fclose($fp);
          return$return;
        } else {
          return(false);
        }

      }

      function destroy($id)
      {
        global$sess_save_path;

        $sess_file="$sess_save_path/sess_$id";
        return(@unlink($sess_file));
      }

      function gc($maxlifetime)
      {
        global$sess_save_path;

        foreach (glob("$sess_save_path/sess_*") as$filename) {
          if (filemtime($filename) +$maxlifetime<time()) {
            @unlink($filename);
          }
        }
        returntrue;
      }
로그인 후 복사

相关推荐:

PHP+redis实现session共享

PHP的SESSION反序列化使用详解

php创建session方法步奏详解

위 내용은 PHP의 SESSION 메커니즘 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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