(PHP 4 >= 4.3.2, PHP 5, PHP 7, PHP 8)
session_regenerate_id — Atualiza o id da sessão atual com um novo id gerado
session_regenerate_id() substituirá o id da sessão atual com um novo id e manterá a informação da sessão atual.
Quando session.use_trans_sid estiver habilitada, saídas (output) devem ser iniciadas depois de session_regenerate_id() ser chamada. Caso contrário, o ID da sessão antiga é utilizado.
Atualmente, session_regenerate_id não lida muito bem em redes instáveis como, por exemplo, móvel e WiFi. Pode ocorrer perda da sessão ao chamar session_regenerate_id.
Os dados de sessões antigas não devem ser destruídos imediatamente; ao invés disso, deve ser usado timestamp para destruir a sessão e controlar o acesso aos dados de sessões antigas. Caso contrário, acessos concorrentes à página podem causar inconsistências, a perda da sessão, ou pode causar uma condição de corrida no navegador do usuário que faz com que vários IDs de sessão sejam criados desnecessariamente. A remoção imediata dos dados de sessão impossibilita a detecção de ataques de roubo de sessão, e também a prevenção.
delete_old_session
Se o arquivo associado à sessão anterior deve ser excluído ou não. A sessão antiga não deve ser removida se for necessário evitar condições de corrida causadas pela remoção, ou se for necessário detectar/evitar ataques de roubo de sessão.
Exemplo #1 Exemplo de session_regenerate_id()
<?php
// NOTA: Este código não é totalmente funcional, mas apenas um exemplo!
session_start();
// Verifica o timestamp para remoção
if (isset($_SESSION['destroyed'])
&& $_SESSION['destroyed'] < time() - 300) {
// Normalmente não deve acontecer. Isso pode ser um ataque ou então causado por uma rede instável.
O módulo de sessão atual não trabalha bem com redes instáveis. O programador deve gerenciar o ID de sessão para evitar a perda da sessão causada por session_regenerate_id.
Exemplo #2 Evitando a perda de sessão causada por session_regenerate_id()
<?php
// NOTA: Este código não é totalmente funcional, mas apenas um exemplo!
// my_session_start() e my_session_regenerate_id() evitam a perda da sessão causada por
// redes instáveis. Além disso, este código pode evitar que a sessão seja
// roubada por atacantes.
function my_session_start() {
session_start();
if (isset($_SESSION['destroyed'])) {
if ($_SESSION['destroyed'] < time()-300) {
// Normalmente não deve acontecer. Isso pode ser um ataque ou então causado por uma rede instável.