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 锟斤拷原锟酵o拷

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)

锟斤拷锟斤拷峄帮拷锟斤拷锟斤拷锟斤拷荩锟絩ead 锟截碉拷锟斤拷锟斤拷锟斤拷锟诫返锟截斤拷锟结话锟斤拷锟捷憋拷锟诫(锟斤拷锟叫伙拷锟斤拷锟斤拷锟斤拷址锟斤拷锟斤拷锟� 锟斤拷锟斤拷峄帮拷锟矫伙拷锟斤拷锟斤拷荩锟絩ead 锟截碉拷锟斤拷锟斤拷锟斤拷锟截匡拷锟街凤拷锟斤拷锟斤拷

锟斤拷锟皆讹拷锟斤拷始锟结话锟斤拷锟斤拷通锟斤拷锟斤拷锟斤拷 session_start() 锟斤拷锟斤拷锟街讹拷锟斤拷始锟结话之锟斤拷PHP 锟节诧拷锟斤拷锟斤拷 read 锟截碉拷锟斤拷锟斤拷锟斤拷锟斤拷取锟结话锟斤拷锟捷★拷 锟节碉拷锟斤拷 read 之前锟斤拷PHP 锟斤拷锟斤拷锟� open 锟截碉拷锟斤拷锟斤拷锟斤拷

read 锟截碉拷锟斤拷锟截碉拷锟斤拷锟叫伙拷之锟斤拷锟斤拷址锟斤拷锟斤拷锟绞斤拷锟斤拷锟斤拷锟� write 锟截碉拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷时锟侥革拷式锟斤拷全一锟铰★拷 PHP 锟斤拷锟皆讹拷锟斤拷锟斤拷锟叫伙拷锟斤拷锟截碉拷锟街凤拷锟斤拷锟斤拷锟斤拷锟� $_SESSION 锟斤拷锟斤拷全锟街憋拷锟斤拷锟斤拷 锟斤拷然锟斤拷锟捷匡拷锟斤拷锟斤拷锟斤拷 serialize() 锟斤拷锟斤拷锟斤拷锟斤拷锟狡o拷 锟斤拷锟斤拷锟斤拷要锟斤拷锟窖碉拷锟角o拷锟斤拷锟斤拷锟角诧拷同锟侥★拷 锟斤拷慰锟斤拷锟� session.serialize_handler锟斤拷

write(string $sessionId, string $data)

锟节会话锟斤拷锟斤拷锟斤拷锟斤拷时锟斤拷锟斤拷锟� write 锟截碉拷锟斤拷锟斤拷锟斤拷 锟剿回碉拷锟斤拷锟斤拷锟斤拷锟秸碉拷前锟结话 ID 锟皆硷拷 $_SESSION 锟斤拷锟斤拷锟斤拷锟斤拷锟叫伙拷之锟斤拷锟斤拷址锟斤拷锟斤拷锟轿拷锟斤拷锟斤拷锟� 锟斤拷锟叫伙拷锟结话锟斤拷锟捷的癸拷锟斤拷锟斤拷 PHP 锟斤拷锟斤拷 session.serialize_handler 锟借定值锟斤拷锟斤拷伞锟�

锟斤拷锟叫伙拷锟斤拷锟斤拷锟斤拷萁锟斤拷突峄� ID 锟斤拷锟斤拷锟斤拷一锟斤拷锟斤拷斜锟斤拷妗� 锟斤拷锟斤拷锟斤拷 read 锟截碉拷锟斤拷锟斤拷锟斤拷取锟斤拷锟斤拷时锟斤拷锟斤拷锟斤拷锟截碉拷锟斤拷锟捷憋拷锟斤拷要锟斤拷 锟斤拷锟斤拷 write 锟截碉拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷全锟斤拷锟斤拷一锟铰★拷

PHP 锟斤拷锟节脚憋拷执锟斤拷锟斤拷匣锟斤拷锟斤拷 session_write_close() 锟斤拷锟斤拷之锟斤拷锟斤拷么嘶氐锟斤拷锟斤拷锟斤拷锟� 注锟解,锟节碉拷锟斤拷锟斤拷嘶氐锟斤拷锟斤拷锟街拷锟絇HP 锟节诧拷锟斤拷锟斤拷锟� close 锟截碉拷锟斤拷锟斤拷锟斤拷

Note:

PHP 锟斤拷锟斤拷锟斤拷锟斤拷锟叫达拷锟斤拷锟较诧拷锟揭关憋拷之锟斤拷 锟脚碉拷锟斤拷 write 锟截碉拷锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷 write 锟截碉拷锟斤拷锟斤拷锟叫的碉拷锟斤拷锟斤拷息锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟叫★拷 锟斤拷锟斤拷锟揭拷锟� write 锟截碉拷锟斤拷锟斤拷锟斤拷使锟矫碉拷锟斤拷锟斤拷锟斤拷锟� 锟斤拷锟介将锟斤拷锟斤拷锟斤拷锟叫达拷氲斤拷募锟斤拷锟�

destroy($sessionId)

锟斤拷锟斤拷锟斤拷 session_destroy() 锟斤拷锟斤拷锟斤拷 锟斤拷锟竭碉拷锟斤拷 session_regenerate_id() 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 destroy 锟斤拷锟斤拷为 TRUE 时锟斤拷 锟斤拷锟斤拷么嘶氐锟斤拷锟斤拷锟斤拷锟斤拷嘶氐锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷晒锟斤拷锟斤拷锟� TRUE锟斤拷锟斤拷之锟斤拷锟斤拷 FALSE锟斤拷

gc($lifetime)

为锟斤拷锟斤拷锟斤拷峄帮拷械木锟斤拷锟斤拷荩锟絇HP 锟结不时锟侥碉拷锟斤拷锟斤拷锟斤拷锟秸硷拷锟截碉拷锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 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

锟节脚憋拷执锟斤拷锟斤拷锟街拷锟絇HP 锟节诧拷锟斤拷锟斤拷锟斤拷锟斤拷锟� 锟斤拷锟斤拷锟叫匡拷锟杰诧拷锟斤拷锟斤拷 write 锟斤拷 close 锟截碉拷锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷锟斤拷锟杰伙拷锟斤拷锟斤拷锟斤拷预锟节碉拷锟斤拷为锟斤拷锟斤拷锟皆碉拷使锟矫讹拷锟斤拷锟斤拷为锟结话锟斤拷锟斤拷锟斤拷锟斤拷锟绞憋拷锟� 锟斤拷要通锟斤拷注锟斤拷 shutdown 锟截碉拷锟斤拷锟斤拷锟斤拷锟斤拷芊锟斤拷铡锟� 通锟斤拷锟斤拷锟斤拷锟斤拷锟酵拷锟斤拷锟斤拷锟� register_shutdown_function() 锟斤拷锟斤拷 锟斤拷注锟斤拷 'session_write_close' 锟截碉拷锟斤拷锟斤拷锟斤拷

锟斤拷 PHP 5.4.0 锟叫o拷锟斤拷锟皆碉拷锟斤拷 session_register_shutdown() 锟斤拷锟斤拷锟斤拷注锟斤拷 shutdown 锟截碉拷锟斤拷锟斤拷锟斤拷 锟斤拷锟斤拷锟绞癸拷锟� session_set_save_handler() 锟斤拷 OOP 原锟酵o拷 锟斤拷么锟斤拷锟斤拷锟斤拷锟斤拷 "register shutdown" 为 TRUE 锟斤拷锟缴★拷

Warning

锟斤拷 PHP 5.0.5 锟叫o拷锟节讹拷锟斤拷锟斤拷锟斤拷之锟斤拷呕锟斤拷锟斤拷 write 锟斤拷 close 锟截碉拷锟斤拷锟斤拷锟斤拷 锟斤拷锟皆o拷锟斤拷锟斤拷锟斤拷锟斤拷锟截碉拷锟斤拷锟斤拷锟叫诧拷锟斤拷锟斤拷使锟矫讹拷锟斤拷也锟斤拷锟斤拷锟斤拷锟阶筹拷锟届常锟斤拷 锟斤拷锟斤拷诤锟斤拷锟斤拷锟斤拷壮锟斤拷斐o拷锟絇HP 锟饺诧拷锟结捕锟斤拷锟斤拷锟斤拷也锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟� 锟斤拷锟斤拷锟结导锟铰筹拷锟斤拷锟届常锟斤拷止锟斤拷 锟斤拷锟角讹拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷使锟矫会话锟斤拷

锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟叫碉拷锟斤拷 session_write_close() 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟解。 锟斤拷锟斤拷注锟斤拷 shutdown 锟截碉拷锟斤拷锟斤拷锟斤拷锟角革拷锟接可匡拷锟斤拷锟斤拷锟斤拷锟斤拷

Warning

锟斤拷锟斤拷峄帮拷诮疟锟斤拷锟斤拷锟斤拷锟截闭o拷锟斤拷锟斤拷某些 SAPI 锟斤拷锟皆o拷锟斤拷前锟斤拷锟斤拷目录锟斤拷锟斤拷锟窖撅拷锟斤拷锟侥变。 锟斤拷锟皆碉拷锟斤拷 session_write_close() 锟斤拷锟斤拷锟节脚憋拷执锟叫斤拷锟斤拷之前锟截闭会话锟斤拷

锟斤拷锟斤拷锟斤拷志

锟芥本 说锟斤拷
7.0.0 锟斤拷锟斤拷锟斤拷选锟斤拷锟斤拷 validate_sid 锟斤拷 锟斤拷锟斤拷 update_timestamp锟斤拷
5.5.1 锟斤拷锟斤拷锟窖★拷锟斤拷锟� create_sid锟斤拷
5.4.0 锟斤拷锟斤拷 SessionHandlerInterface 锟接匡拷锟皆硷拷 SessionHandler 锟洁,锟皆凤拷锟斤拷锟矫伙拷实锟斤拷锟皆讹拷锟斤拷幕峄帮拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷

锟轿硷拷