>  기사  >  백엔드 개발  >  PHP의 SESSION 메커니즘 분석

PHP의 SESSION 메커니즘 분석

小云云
小云云원래의
2017-11-08 15:10:121714검색

기본 메커니즘은 디스크 파일을 사용하여 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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