기본 메커니즘은 디스크 파일을 사용하여 PHP 세션을 구현합니다. php.ini 구성: session.save_handler = files
1, session_start()
A, session_start()는 세션 메커니즘의 시작입니다. 세션이
PHP 자체 가비지 수집이 유효하지 않습니다. SESSION 재활용에는 파일 삭제가 필요합니다. 이 확률은 php.ini의 구성에 따라 결정됩니다.
그러나 일부 시스템에는 session.gc_probability =0이 있으며 이는 확률이 0임을 의미합니다. 가비지 수집은 cron 스크립트를 통해 구현됩니다.
session.gc_probability =1 session.gc_divisor =1000 session.gc_maxlifetime =1440//过期时间 默认24分钟 //概率是 session.gc_probability/session.gc_divisor 结果 1/1000, //不建议设置过小,因为session的垃圾回收,是需要检查每个文件是否过期的。 session.save_path =//好像不同的系统默认不一样,有一种设置是 “N;/path” //这是随机分级存储,这个样的话,垃圾回收将不起作用,需要自己写脚本
B. Session은 현재 $_COOKIE[session_name()]이 있는지 확인합니다. session_name()은 session_id를 저장하는 COOKIE 키 값을 반환합니다.
이 값은 php.ini
session.name = PHPSESSID //默认值PHPSESSID
C에서 찾을 수 있습니다. 존재하지 않으면 A session_id가 생성되고 생성된 session_id를 COOKIE 값으로 클라이언트에 전달합니다.
이 단계는 setcookie() 작업을 수행하는 것과 동일하며 COOKIE입니다.
이전에는 출력이 없습니다. PHP에는 session_regenerate_id()라는 또 다른 함수가 있습니다.
setcookie(session_name(), session_id(), session.cookie_lifetime,//默认0 session.cookie_path,//默认’/’当前程序跟目录下都有效 session.cookie_domain,//默认为空 )
D. 존재한다면 session_id =$_COOKIE[session_name];
그런 다음 session.save_path에 지정된 폴더로 이동하여 'SESS_'.session_id()라는 파일을 찾습니다.
내용을 읽어보세요. 파일을 저장하고 직렬화한 다음 $_SESSION
에 넣습니다. $_SESSION
에 값을 할당합니다. 예를 들어 새 값 $_SESSION['test'] ='blah'를 추가하면 이 $_SESSION만 유지됩니다.
마지막으로 session_id로 지정된 폴더에 $_SESSION 값을 쓴 후 관련 리소스를 닫습니다. 이 단계에서는 session_id를 변경하는 작업을 수행할 수 있습니다.
예를 들어 이전 session_id를 삭제하고 새 session_id를 생성합니다. 예를 들어 Drupal의 익명 사용자는 로그인할 때 SESSION을 사용해야 합니다. 새로운 session_id
if (isset($_COOKIE[session_name()])) { setcookie(session_name(),”,time() 42000,’/’);//旧session cookie过期 } session_regenerate_id();//这一步会生成新的session_id //session_id()返回的是新的值
위 내용은 PHP의 SESSION 메커니즘 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!