session_regenerate_id

(PHP 4 >= 4.3.2, PHP 5, PHP 7)

session_regenerate_id 使锟斤拷锟斤拷锟斤拷锟缴的会话 ID 锟斤拷锟斤拷锟斤拷锟叫会话 ID

说锟斤拷

session_regenerate_id ([ bool $delete_old_session = FALSE ] ) : bool

session_regenerate_id() 锟节诧拷锟睫改碉拷前锟结话锟斤拷锟斤拷锟捷碉拷前锟斤拷锟斤拷使锟斤拷锟铰碉拷 ID 锟芥换原锟叫会话 ID锟斤拷

锟斤拷锟斤拷锟斤拷锟斤拷锟� session.use_trans_sid 选锟筋, 锟斤拷么锟斤拷锟斤拷锟节碉拷锟斤拷 session_regenerate_id() 锟斤拷锟斤拷之锟斤拷始锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟� 锟斤拷锟斤拷岬硷拷锟绞癸拷锟皆拷械幕峄� ID锟斤拷

Warning

锟斤拷前锟斤拷 session_regenerate_id 锟斤拷没锟叫很好的达拷锟斤拷锟斤拷锟斤拷锟斤拷锟狡讹拷锟斤拷锟斤拷锟斤拷锟斤拷锟� WiFi 锟斤拷锟界不锟饺讹拷锟侥筹拷锟斤拷锟斤拷 锟斤拷耍锟斤拷锟斤拷锟� session_regenerate_id 锟斤拷锟斤拷 锟斤拷锟杰会导锟铰会话锟斤拷失锟斤拷

锟姐不应锟斤拷直锟斤拷锟斤拷锟劫旧的会话锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟捷o拷 锟斤拷锟斤拷应锟斤拷使锟斤拷时锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷贫锟斤拷锟斤拷丫锟绞э拷幕峄� ID 锟侥凤拷锟绞★拷 锟斤拷锟津,匡拷锟杰伙拷锟节诧拷锟斤拷锟斤拷锟绞的筹拷锟斤拷锟铰碉拷锟铰会话锟斤拷锟捷诧拷一锟铰★拷 锟结话锟斤拷失锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷突锟斤拷耍锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟杰讹拷锟斤拷锟矫的会话 ID锟斤拷 锟斤拷锟角o拷锟斤拷锟斤拷一锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷删锟斤拷锟结话锟叫碉拷锟斤拷锟斤拷 锟斤拷锟皆凤拷止锟结话锟劫持癸拷锟斤拷锟斤拷

锟斤拷锟斤拷

delete_old_session

锟角凤拷删锟斤拷原 ID 锟斤拷锟斤拷锟斤拷锟侥会话锟芥储锟侥硷拷锟斤拷 锟斤拷锟斤拷锟斤拷锟揭拷锟斤拷锟结话锟斤拷锟斤拷锟斤拷锟绞筹拷突锟斤拷锟斤拷么锟斤拷应锟斤拷锟斤拷锟斤拷删锟斤拷锟结话锟叫碉拷锟斤拷锟捷★拷 锟斤拷锟斤拷锟斤拷锟揭拷锟街癸拷峄帮拷俪止锟斤拷锟斤拷锟斤拷锟矫达拷锟斤拷锟斤拷锟斤拷锟缴撅拷锟斤拷峄帮拷锟斤拷荨锟�

锟斤拷锟斤拷值

锟缴癸拷时锟斤拷锟斤拷 TRUE锟斤拷 锟斤拷锟斤拷锟斤拷失锟斤拷时锟斤拷锟斤拷 FALSE锟斤拷

锟斤拷锟斤拷锟斤拷志

锟芥本 说锟斤拷
7.0.0 session_regenerate_id() 锟斤拷锟斤拷锟节关闭癸拷锟节会话之前锟斤拷锟斤拷锟斤拷锟叫碉拷锟斤拷锟捷★拷
5.1.0 锟铰硷拷 delete_old_session 锟斤拷锟斤拷锟斤拷
4.3.3 锟斤拷锟斤拷锟斤拷没峄� cookie锟斤拷 锟斤拷锟斤拷 session_regenerate_id() 锟斤拷锟斤拷 锟斤拷使锟斤拷锟铰的会话 ID 锟斤拷锟斤拷锟斤拷 cookie 锟斤拷锟斤拷锟酵革拷锟酵伙拷锟剿★拷

锟斤拷锟斤拷

Example #1 A session_regenerate_id() 示锟斤拷

<?php
// 注锟解:锟斤拷锟叫诧拷锟斤拷锟斤拷锟斤拷锟侥达拷锟诫,只锟斤拷一锟斤拷示锟斤拷

session_start();

// 锟斤拷锟结话锟斤拷锟斤拷锟劫碉拷时锟斤拷锟�
if (isset($_SESSION['destroyed'])
    && 
$_SESSION['destroyed'] < time() - 300) {
    
// 通锟斤拷锟斤拷锟结发锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷么锟斤拷锟斤拷锟斤拷锟斤拷锟节诧拷锟饺讹拷锟斤拷锟斤拷锟斤拷状锟斤拷锟斤拷锟竭憋拷锟斤拷锟斤拷锟斤拷锟铰碉拷
    // 锟狡筹拷锟矫伙拷锟结话锟叫碉拷锟斤拷证锟斤拷息
    
remove_all_authentication_flag_from_active_sessions($_SESSION['userid']);
    throw(new 
DestroyedSessionAccessException);
}

$old_sessionid session_id();

// 锟斤拷锟矫会话锟斤拷锟斤拷时锟斤拷锟�
$_SESSION['destroyed'] = time(); // 锟斤拷 PHP 7.0.0 锟斤拷始, session_regenerate_id() 锟斤拷锟皆讹拷锟斤拷锟斤拷峄帮拷锟斤拷锟�

// 锟斤拷锟街憋拷拥锟斤拷锟� session_regenerate_id() 锟斤拷锟斤拷锟斤拷锟杰会导锟铰会话锟斤拷失锟斤拷锟斤拷锟斤拷锟�
// 锟轿硷拷锟斤拷锟斤拷锟斤拷锟斤拷锟�
session_regenerate_id();

// 锟铰达拷锟斤拷锟侥会话锟斤拷锟斤拷要时锟斤拷锟�
unset($_SESSION['destroyed']);

$new_sessionid session_id();

echo 
"Old Session: $old_sessionid<br />";
echo 
"New Session: $new_sessionid<br />";

print_r($_SESSION);
?>

锟斤拷前锟侥会话模锟斤拷未锟杰很好的达拷锟斤拷锟斤拷锟斤拷锟界不锟饺讹拷锟斤拷时锟斤拷锟铰会话锟斤拷失锟侥筹拷锟斤拷锟斤拷 锟斤拷锟斤拷要锟斤拷锟叫癸拷锟斤拷峄� ID 锟斤拷锟斤拷锟斤拷锟� session_regenerate_id 锟斤拷锟铰会话锟斤拷失锟斤拷

Example #2 Avoiding lost session by session_regenerate_id()

<?php
// 注锟解:锟斤拷锟叫诧拷锟斤拷锟斤拷锟斤拷锟侥达拷锟诫,只锟斤拷一锟斤拷示锟斤拷
// my_session_start() 锟斤拷 my_session_regenerate_id()
// 锟斤拷锟斤拷锟斤拷锟皆憋拷锟斤拷锟斤拷锟斤拷锟界不锟饺讹拷锟斤拷锟斤拷锟斤拷碌锟斤拷禄峄帮拷锟绞э拷锟斤拷锟斤拷狻�
// 锟斤拷锟揭伙拷锟斤拷锟皆憋拷锟斤拷锟矫伙拷锟结话锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷

function my_session_start() {
    
session_start();
    if (isset(
$_SESSION['destroyed'])) {
       if (
$_SESSION['destroyed'] < time()-300) {
           
// 通锟斤拷锟斤拷锟结发锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷么锟斤拷锟斤拷锟斤拷锟斤拷锟节诧拷锟饺讹拷锟斤拷锟斤拷锟斤拷状锟斤拷锟斤拷锟竭憋拷锟斤拷锟斤拷锟斤拷锟铰碉拷
           // 锟狡筹拷锟矫伙拷锟结话锟叫碉拷锟斤拷证锟斤拷息
           
remove_all_authentication_flag_from_active_sessions($_SESSION['userid']);
           throw(new 
DestroyedSessionAccessException);
       }
       if (isset(
$_SESSION['new_session_id'])) {
           
// 锟斤拷未锟斤拷全锟斤拷锟节o拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟界不锟饺讹拷锟斤拷锟斤拷摹锟�
           // 锟斤拷锟斤拷锟劫达拷锟斤拷锟斤拷锟斤拷确锟侥会话 ID cookie锟斤拷
           // 注锟解:锟斤拷锟斤拷锟斤拷锟揭拷瞥锟斤拷锟街わ拷锟角o拷锟斤拷么锟斤拷要锟斤拷锟斤拷锟劫达拷锟斤拷锟矫会话 ID锟斤拷
           
session_commit();
           
session_id($_SESSION['new_session_id']);
           
// 锟斤拷锟斤拷锟斤拷锟斤拷锟铰的会话 ID 锟剿★拷
           
session_start();
           return;
       }
   }
}

function 
my_session_regenerate_id() {
    
// 锟斤拷锟斤拷锟斤拷诓锟斤拷榷锟斤拷锟斤拷锟斤拷绲硷拷锟矫伙拷写锟斤拷锟斤拷峄� ID锟斤拷
    // 锟斤拷么锟酵达拷锟斤拷一锟斤拷
    
$new_session_id session_create_id();
    
$_SESSION['new_session_id'] = $new_session_id;
    
    
// 锟斤拷锟斤拷锟斤拷锟斤拷时锟斤拷锟�
    
$_SESSION['destroyed'] = time();
    
    
// 锟斤拷锟芥并锟截闭会话
    
session_commit();

    
// 使锟斤拷锟铰的会话 ID 锟斤拷始锟结话
    
session_id($new_session_id);
    
ini_set('session.use_strict_mode'0);
    
session_start();
    
ini_set('session.use_strict_mode'1);
    
    
// 锟铰的会话锟斤拷锟斤拷要锟斤拷 2 锟斤拷锟斤拷锟斤拷锟斤拷
    
unset($_SESSION['destroyed']);
    unset(
$_SESSION['new_session_id']);
}
?>

锟轿硷拷