(PHP 4, PHP 5, PHP 7)
session_set_save_handler — �����û��Զ���Ự�洢����
$open
, callable $close
, callable $read
, callable $write
, callable $destroy
, callable $gc
[, callable $create_sid
[, callable $validate_sid
[, callable $update_timestamp
]]] ) : bool�� PHP 5.4 ��ʼ������ʹ������ķ�ʽ��ע���Զ���Ự�洢������
$sessionhandler
[, bool $register_shutdown
= TRUE
] ) : boolsession_set_save_handler() �����û��Զ��� �Ự�洢������ �����ʹ�� PHP ���õĻỰ�洢����֮��ķ�ʽ�� ����ʹ�ñ������� ���磬�����Զ���Ự�洢���������Ự���ݴ洢�����ݿ⡣
�������� 2 ��ԭ�ͣ�
sessionhandler
ʵ���� SessionHandlerInterface�� SessionIdInterface ��/�� SessionUpdateTimestampHandlerInterface �ӿڵĶ��� ���� SessionHandler�� �� PHP 5.4 ֮�����ʹ�á�
register_shutdown
������ session_write_close() ע��Ϊ register_shutdown_function() ������
open(string $savePath, string $sessionName)
open �ص�������������Ĺ��캯����
�ڻỰ��ʱ��ᱻ���á�
�����Զ���ʼ�Ự����ͨ������ session_start() �ֶ���ʼ�Ự
֮���һ�������õĻص�������
�˻ص����������ɹ����� TRUE
����֮���� FALSE
��
close()
close �ص������������������������
�� write �ص���������֮����á�
������ session_write_close() ����֮��Ҳ����� close �ص�������
�˻ص����������ɹ����� TRUE
����֮���� FALSE
��
read(string $sessionId)
����Ự�������ݣ�read �ص��������뷵�ؽ��Ự���ݱ��루���л�������ַ����� ����Ự��û�����ݣ�read �ص��������ؿ��ַ�����
���Զ���ʼ�Ự����ͨ������ session_start() �����ֶ���ʼ�Ự֮��PHP �ڲ����� read �ص���������ȡ�Ự���ݡ� �ڵ��� read ֮ǰ��PHP ����� open �ص�������
read �ص����ص����л�֮����ַ�����ʽ������ write
�ص�������������ʱ�ĸ�ʽ��ȫһ�¡�
PHP ���Զ������л����ص��ַ�������� $_SESSION ����ȫ�ֱ�����
��Ȼ���ݿ������� serialize() ���������ƣ�
������Ҫ���ѵ��ǣ������Dz�ͬ�ġ�
���� session.serialize_handler��
write(string $sessionId, string $data)
�ڻỰ��������ʱ����� write
�ص�������
�˻ص��������յ�ǰ�Ự ID �Լ� $_SESSION ���������л�֮����ַ�����Ϊ������
���л��Ự���ݵĹ����� PHP ���� session.serialize_handler �趨ֵ����ɡ�
���л�������ݽ��ͻỰ ID ������һ����б��档
������ read
�ص�������ȡ����ʱ�������ص����ݱ���Ҫ��
���� write
�ص�������������ȫ����һ�¡�
PHP ���ڽű�ִ����ϻ���� session_write_close() ����֮����ô˻ص�������
ע�⣬�ڵ�����˻ص�����֮��PHP �ڲ������ close
�ص�������
Note:
PHP ���������д����ϲ��ҹر�֮�� �ŵ��� write �ص������� ������ write �ص������еĵ�����Ϣ���������������С� �����Ҫ�� write �ص�������ʹ�õ�������� ���齫�������д�뵽�ļ���
destroy($sessionId)
������ session_destroy() ������
���ߵ��� session_regenerate_id() ������������ destroy ����Ϊ TRUE
ʱ��
����ô˻ص��������˻ص����������ɹ����� TRUE
����֮���� FALSE
��
gc($lifetime)
Ϊ������Ự�еľ����ݣ�PHP �ʱ�ĵ��������ռ��ص�������
���������� session.gc_probability
�� session.gc_divisor �������ơ�
���뵽�˻ص������� lifetime ������ session.gc_maxlifetime ���á�
�˻ص����������ɹ����� TRUE
����֮���� FALSE
��
create_sid()
����Ҫ�µĻỰ ID ʱ�����õĻص������� �ص�����������ʱ��������� �䷵��ֵӦ����һ���ַ�����ʽ�ġ���Ч�ĻỰ ID��
�ɹ�ʱ���� TRUE
�� ������ʧ��ʱ���� FALSE
��
Example #1 �Զ���Ự�������� ����������μ� SessionHandlerInterface��
���д��������� PHP 5.4.0 �����ϰ汾�� ������г��˵��÷�ʽ������������μ� SessionHandlerInterface��
����ʹ���� session_set_save_handler() ������ OOP ԭ�� ����ʹ�õڶ���������ע�� shutdown ������ ��������ע��Ϊ�Ự���������ʱ������ʹ�����ַ�ʽ��
<?php
class MySessionHandler implements SessionHandlerInterface
{
// ������ʵ�ֽӿ�
}
$handler = new MySessionHandler();
session_set_save_handler($handler, true);
session_start();
// ���ڿ���ʹ�� $_SESSION �����Լ���ȡ������
Example #2 ʹ�ö����Զ���Ự���������
���д��������� PHP 5.4.0 ֮ǰ�İ汾��
������ʾ�˻����ļ��ĻỰ���ݴ洢��
�� PHP Ĭ�ϵ� files
�洢�������ơ�
ͨ���Դ�ʾ�����������չ��
����Ժܷ����ʵ��ʹ�����ݿⱣ��Ự���ݵĹ��ܡ�
����� PHP 5.4.0 ֮ǰ�İ汾�� ͨ������ register_shutdown_function() ���� ��ע�� session_write_close() �ص������� ��Ҳ�����ǽ���ķ�ʽ��
<?php
class FileSessionHandler
{
private $savePath;
function open($savePath, $sessionName)
{
$this->savePath = $savePath;
if (!is_dir($this->savePath)) {
mkdir($this->savePath, 0777);
}
return true;
}
function close()
{
return true;
}
function read($id)
{
return (string)@file_get_contents("$this->savePath/sess_$id");
}
function write($id, $data)
{
return file_put_contents("$this->savePath/sess_$id", $data) === false ? false : true;
}
function destroy($id)
{
$file = "$this->savePath/sess_$id";
if (file_exists($file)) {
unlink($file);
}
return true;
}
function gc($maxlifetime)
{
foreach (glob("$this->savePath/sess_*") as $file) {
if (filemtime($file) + $maxlifetime < time() && file_exists($file)) {
unlink($file);
}
}
return true;
}
}
$handler = new FileSessionHandler();
session_set_save_handler(
array($handler, 'open'),
array($handler, 'close'),
array($handler, 'read'),
array($handler, 'write'),
array($handler, 'destroy'),
array($handler, 'gc')
);
// �������д�����Է�ֹʹ�ö�����Ϊ�Ự���������ʱ���������ķ�Ԥ����Ϊ
register_shutdown_function('session_write_close');
session_start();
// ���ڿ���ʹ�� $_SESSION �����Լ���ȡ������
�ڽű�ִ�����֮��PHP �ڲ����������
�����п��ܲ����� write
�� close
�ص�������
�������ܻ�������Ԥ�ڵ���Ϊ�����Ե�ʹ�ö�����Ϊ�Ự���������ʱ��
��Ҫͨ��ע�� shutdown �ص���������ܷ��ա�
ͨ���������ͨ������ register_shutdown_function() ����
��ע�� 'session_write_close'
�ص�������
�� PHP 5.4.0 �У����Ե��� session_register_shutdown()
������ע�� shutdown �ص�������
�����ʹ�� session_set_save_handler() �� OOP ԭ�ͣ�
��ô�������� "register shutdown" Ϊ TRUE
���ɡ�
�� PHP 5.0.5 �У��ڶ�������֮��Ż����
write
�� close
�ص�������
���ԣ����������ص������в�����ʹ�ö���Ҳ�������׳��쳣��
����ں������׳��쳣��PHP �Ȳ��Ჶ������Ҳ�����������
�����ᵼ�³����쳣��ֹ��
���Ƕ���������������ʹ�ûỰ��
���������������е��� session_write_close() ���������������⡣ ����ע�� shutdown �ص��������Ǹ��ӿɿ���������
����Ự�ڽű�������رգ�����ijЩ SAPI ���ԣ���ǰ����Ŀ¼�����Ѿ����ı䡣 ���Ե��� session_write_close() �����ڽű�ִ�н���֮ǰ�رջỰ��
�汾 | ˵�� |
---|---|
7.0.0 |
������ѡ���� validate_sid ��
���� update_timestamp ��
|
5.5.1 |
�����ѡ���� create_sid ��
|
5.4.0 | ���� SessionHandlerInterface �ӿ��Լ� SessionHandler �࣬�Է����û�ʵ���Զ���ĻỰ����������� |