session_set_save_handler

(PHP 4, PHP 5, PHP 7)

session_set_save_handler�����û��Զ���Ự�洢����

˵��

session_set_save_handler ( callable $open , callable $close , callable $read , callable $write , callable $destroy , callable $gc [, callable $create_sid [, callable $validate_sid [, callable $update_timestamp ]]] ) : bool

�� PHP 5.4 ��ʼ������ʹ������ķ�ʽ��ע���Զ���Ự�洢������

session_set_save_handler ( object $sessionhandler [, bool $register_shutdown = TRUE ] ) : bool

session_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($handlertrue);
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->savePath0777);
        }

        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 �����Լ���ȡ������

ע��

Warning

�ڽű�ִ�����֮��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 ���ɡ�

Warning

�� PHP 5.0.5 �У��ڶ�������֮��Ż���� write �� close �ص������� ���ԣ����������ص������в�����ʹ�ö���Ҳ�������׳��쳣�� ����ں������׳��쳣��PHP �Ȳ��Ჶ������Ҳ����������� �����ᵼ�³����쳣��ֹ�� ���Ƕ���������������ʹ�ûỰ��

���������������е��� session_write_close() ���������������⡣ ����ע�� shutdown �ص��������Ǹ��ӿɿ���������

Warning

����Ự�ڽű�������رգ�����ijЩ SAPI ���ԣ���ǰ����Ŀ¼�����Ѿ����ı䡣 ���Ե��� session_write_close() �����ڽű�ִ�н���֮ǰ�رջỰ��

������־

�汾 ˵��
7.0.0 ������ѡ���� validate_sid �� ���� update_timestamp��
5.5.1 �����ѡ���� create_sid��
5.4.0 ���� SessionHandlerInterface �ӿ��Լ� SessionHandler �࣬�Է����û�ʵ���Զ���ĻỰ�����������

�μ�