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 ���粻�ȶ��ij����� ��ˣ����� session_regenerate_id ���� ���ܻᵼ�»Ự��ʧ��

�㲻Ӧ��ֱ�����پɵĻỰ�����������ݣ� ����Ӧ��ʹ��ʱ������������ƶ����Ѿ�ʧЧ�ĻỰ ID �ķ��ʡ� ���򣬿��ܻ��ڲ������ʵij����µ��»Ự���ݲ�һ�¡� �Ự��ʧ��������������������ͻ��ˣ�������������ܶ����õĻỰ ID�� ���ǣ�����һ��������������ɾ���Ự�е����� ���Է�ֹ�Ự�ٳֹ�����

����

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);
?>

��ǰ�ĻỰģ��δ�ܺܺõĴ��������粻�ȶ���ʱ���»Ự��ʧ�ij����� ����Ҫ���й���Ự 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'])) {
           
// ��δ��ȫ���ڣ��������������粻�ȶ�����ġ�
           // �����ٴ�������ȷ�ĻỰ ID cookie��
           // ע�⣺�������Ҫ�Ƴ���֤��ǣ���ô��Ҫ�����ٴ����ûỰ 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']);
}
?>

�μ�