Session 기술을 사용하여 시스템 내에서 사용자를 추적하는 경우 Session의 기본 처리 방법은 각 사용자의 세션 정보를 웹 서버의 파일에 기록하고 session.save_path를 통해 세션 데이터 파일의 경로를 생성하는 것입니다. php.ini에서. 이 기본 처리 방법은 편리하지만 결함도 있습니다. 이는 시스템의 실행 효율성에 심각한 영향을 미칩니다. 주된 이유는 상대적으로 접근량이 많은 시스템의 경우 일반적으로 여러 서버가 동시 처리에 사용되기 때문에 자체 세션 메커니즘을 여러 시스템에서 사용할 수 없기 때문입니다. 각 서버가 세션을 별도로 처리하면 사용자 추적 목적을 달성할 수 없습니다. 이때 세션이 처리되는 방식을 변경해야 합니다. 공유 기술을 사용하여 세션 정보를 다른 서버에 저장하거나 데이터베이스를 사용하여 세션 정보를 저장할 수 있습니다.
세션 정보를 공유하기 위해 데이터베이스를 사용하든 공유 기술을 사용하든 원칙은 기본적으로 동일하며 PHP의 session_set_save_handler() 함수를 통해 기본 처리 방법을 변경하고, 처리를 맞춤설정하는 콜백 함수입니다. 함수는 다음과 같습니다.
session_set_save_handler(open, close, read, write, destroy, gc)
이 함수에는 필수 매개변수로 총 6개의 콜백 함수가 필요하며, 이는 세션 수명 주기의 6개 프로세스를 나타냅니다. 각 함수를 사용자 정의하여
정보를 설정합니다. 세션 수명주기의 각 링크에서 처리됩니다.
回调函数 | 描 述 |
open | 运行 session_start()时执行。该含税需要声明两个参数,系统会自动将php.ini 中的 session.save_path 选项值传递给该函数的第一个参数,将session 名自动传递到第二个参数中。返回 true 则可以继续向下执行。 |
close | 该函数不需要参数,在脚本执行完成或调用 session_write_close()、session_destroy()时被执行,即在所有 Session 操作完成后被执行。如果不需要处理,直接返回 true。 |
read | 在运行 session_start()时执行,因为在开启会话时,会去读取当前 session 数据并写入 $_SESSION 变量。需要声明一个参数,系统会自动将 Session ID 传递给该函数,用于通过 Session ID获取对应的用户数据,返回当前用户的会话信息写入 $_SESSION 变量 |
write | 该函数在脚本结束和对$_SESSION 变量赋值时执行。需要声明两个参数,分别是 Session ID 和串行化后的 session 信息字符串。在对$_SESSION 变量赋值时,就可以通过 Session ID 找到存储的位置,并将信息写入。存储成功后返回 true 并继续向下执行 |
destroy | 在运行session_destroy()时执行,需要声明一个参数,系统会自动将 Session ID 传递给该函数,去删除对应的会话信息。 |
gc | 在垃圾回收程序启动时执行。需要声明一个参数,系统会将 php.ini 中的 session.gc_maxlifetime 选项值传给该函数,用于删除超过这个时间的 Session 信息。返回 true 则可以继续向下执行。 |
참고: session_start()를 실행할 때 열기(세션 시작), 읽기(현재 세션 데이터를 읽고 $_SESSION에 쓰기) 및 gc(가비지 정리) ) 작업을 수행하는 경우 스크립트의 $_SESSION에 대한 모든 작업은 이러한 콜백 함수를 호출하지 않습니다. session_destroy() 함수 호출 시 destroy를 실행하여 현재 세션을 파기하지만(보통 응답 레코드나 파일 삭제), 이 콜백 함수는 이때
$_SESSION 변수에는 여전히 값이 있지만 이 값은 닫힌 후에 다시 기록되지 않습니다.session_wrte_close() 함수 호출 시 쓰기 및 닫기를 실행하고 $_SESSION을 저장소에 저장합니다. 수동으로 사용하지 않으면 스크립트 마지막에 자동으로 실행됩니다.
위 내용은 PHP 사용자 정의 세션에 대한 정보 처리 지침의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!