>백엔드 개발 >PHP 튜토리얼 >PHP의 세션 메커니즘에 대한 심층적인 이해

PHP의 세션 메커니즘에 대한 심층적인 이해

WBOY
WBOY원래의
2016-08-08 09:28:57914검색

오늘 저는 엄격하게 30분 안에 만료되는 세션을 설정하는 방법에 대한 Niao 형제의 기사를 읽었습니다.
나는 PHP의 세션 메커니즘에 관심을 가지게 되었고, 이를 연구하기 위해 인터넷에서 몇 가지 정보를 찾았습니다.

PHP 세션 관리 시스템은 다양한 구성 옵션을 지원하며, 이는 자신의 php.ini 파일에서 설정할 수 있습니다.
php.ini의 세션 구성에서 session.save_handler는 세션과 관련된 데이터를 저장하고 가져오는 프로세서의 이름을 정의합니다. 기본값은 파일입니다. 개별 확장은 자체 등록된 처리를 등록할 수 있습니다. 프로그램은 phpinfo()를 참조하여 설치별로 사용할 수 있습니다. session_set_save_handler()를 참조하세요.
PHP 구성에서 세션을 처리하는 방법에는 두 가지가 있습니다. 하나는 기본 파일이고 다른 하나는 사용자 정의입니다.
1. session.save_handler=files
1. session_start()
1.1 session_start()는 세션 메커니즘의 시작입니다. 세션이 파일에 저장되기 때문에 SESSION 세션에 대한 자체 가비지 수집이 유효하지 않습니다. 확률은 php.ini(session.save_path) 구성에 따라 결정됩니다.
일부 시스템에는 session.gc_probability = 0이 있는데, 이는 확률이 0임을 의미하며 가비지 수집은 cron 스크립트를 통해 구현됩니다.

<code>            session<span>.gc</span>_probability = <span>1</span>
            session<span>.gc</span>_divisor = <span>100</span>
            session<span>.gc</span>_maxlifetime = <span>1440</span>//过期时间 默认<span>24</span>分钟
            //概率是 session<span>.gc</span>_probability/session<span>.gc</span>_divisor 结果 <span>1</span>/<span>100</span>, 
            //不建议设置过小,因为session的垃圾回收,是需要检查每个文件是否过期的。
            session<span>.save</span>_path = //好像不同的系统默认不一样,有一种设置是 <span>"N;/path"</span>
            //这是随机分级存储,这个样的话,垃圾回收将不起作用,需要自己写脚本</code>

1.2 세션은 현재 $_COOKIE[session_name()]이 있는지 확인합니다. session_name()은 session_id를 저장하는 COOKIE 키 값을 반환합니다. 이 값은 php.ini에서 찾을 수 있습니다.

<code><span>session.name </span>=<span> PHPSESSID //默认值PHPSESSID</span></code>
1.3 존재하지 않는 경우 session_id가 생성되며, 생성된 session_id는 COOKIE 값으로 클라이언트에 전달됩니다. 이는 다음 COOKIE 작업을 실행하는 것과 동일합니다. 이 단계는 setcookie() 작업을 실행합니다. 이 전에는 COOKIE가 출력될 수 없습니다. 이 함수를 사용하면, 그 전에는 출력이 있을 수 없습니다.

<code>    setcookie(session_name(),
              session_id(),
              session.cookie_lifetime,<span>//</span>默认<span>0</span>
              session.cookie_path,<span>//</span>默认<span>'/'</span>当前程序跟目录下都有效
              session.cookie_domain,<span>//</span>默认为空
              )</code>
1.4 존재하는 경우 session_id =

$_COOKIE[session_name] 그런 다음 session.save_path에 지정된 폴더로 이동하여 'SESS_'라는 파일을 찾습니다.
파일 내용을 읽고 역직렬화한 후
$_SESSION 전역 변수 에 넣습니다. 2.
$_SESSION에 값을 할당합니다. 예를 들어 새 값
$_SESSION['test']= 'test';를 추가하면 이 $_SESSION은 스크립트 실행이 종료될 때만 유지됩니다. , $_SESSION session_id로 지정된 폴더에 값을 기록한 후 관련 리소스를 닫는 단계에서 session_id를 변경하는 작업을 수행할 수 있습니다. 예를 들어 이전 session_id를 삭제하고 새 session_id를 생성합니다. 그 중 절반은 사용자 정의 세션 작업 및 역할 변환에 사용됩니다. 예를 들어 Drupal의 익명 사용자는 로그인할 때 SESSION을 사용해야 합니다. 새 세션_ID.

<code>if (<span>isset($_COOKIE[<span>session_name()</span>])</span>) {
          <span>setcookie(<span>session_name()</span>, <span>''</span>, <span>time()</span> - <span>42000</span>, <span>'/'</span>)</span>;<span>//旧session cookie过期</span>
        }
        <span>session_regenerate_id()</span>;<span>//这一步会生成新的session_id</span><span>//session_id()返回的是新的值</span></code>
3. SESSION 작업 쓰기

스크립트가 끝나면 SESSION 쓰기 작업이 수행되고
$_SESSION의 값이 session_id라는 파일에 기록됩니다. 이미 존재할 수도 있고 새 파일이 필요할 수도 있습니다. 생성되었습니다. 4. 세션 삭제
SESSION에서 전송한 COOKIE는 일반적으로 인스턴트 COOKIE이며 메모리에 저장됩니다. 브라우저를 닫는 대신 로그아웃하는 등 수동으로 만료를 강제해야 하는 경우에는 해당 쿠키를 파기해야 합니다. 코드에는 여러 가지 방법이 있습니다. 4.1 setcookie(session_name(), session_id(), time() - 8000000, ..);//로그아웃 전 실행
4.2 usset(
$
_SESSION);//새로 고침 후에는 모든 $_SESSION 데이터가 삭제되지만 COOKIE는 전달되지만 데이터는 없습니다. 4.3 session_destroy();//이 함수는 더 철저합니다. $_SESSION을 삭제하고 세션 파일과 session_id를 삭제합니다 브라우저를 닫지 않고 다시 새로고침을 하면 2번과 3번에 COOKIE가 전송되는데 데이터를 찾을 수 없습니다

2. session.save_handler=user

PHP 매뉴얼에는 사용자 정의 세션 저장 기능을 설정하는 session_set_save_handler가 있습니다. PHP에 내장된 세션 저장 메커니즘 이외의 방법을 사용하려는 경우 이 기능을 사용할 수 있습니다. 예를 들어 세션 저장 기능을 사용자 정의하여 데이터베이스에 세션 데이터를 저장할 수 있습니다.

자세한 내용은 PHP 매뉴얼 http://php.net/manual/zh/function.session-set-save-handler.php

을 확인하세요. 위에서는 PHP의 세션 메커니즘에 대한 심층적인 이해를 소개했으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

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