Strona główna >PHP >Leksykon PHP – funkcje >session_regenerate_id

session_regenerate_id

session_regenerate_id($delete_old_session)

Tworzy dla bieżącej sesji nowe ID, zachowuje dane w $_SESSION i wysyła przeglądarce nowe cookie. Zwraca true, przy błędzie false.

Parametry

  • $delete_old_session – opcjonalny, domyślnie false. Z true usuwa dane pod starym ID, co jest pożądane przy logowaniu.

Przykłady

session_start();
$_SESSION["cart"] = array(15, 27);
$old = session_id();
// po udanym zalogowaniu
var_dump(session_regenerate_id(true)); // bool(true)
var_dump($old !== session_id()); // bool(true)
// dane zostały
echo implode(", ", $_SESSION["cart"]); // 15, 27
$_SESSION["user_id"] = 15;
session_destroy();
// bez działającej sesji nie działa (komunikat tu stłumiony przez @)
var_dump(@session_regenerate_id()); // bool(false)

Na co uważać

  • Wywołuj ją po każdym zalogowaniu i po zmianie uprawnień. Inaczej atakujący, który wcześniej podsunie odwiedzającemu własne ID sesji, byłby po zalogowaniu odwiedzającego także zalogowany.
  • Bez parametru true dane pod starym ID zostają na serwerze, dopóki nie usunie ich czyszczenie sesji.
  • Nie wywołuj jej przy każdym zapytaniu. Równoległe zapytania (AJAX) ze starym ID mogą wtedy stracić sesję.
  • Sesja musi działać, a nagłówki nie mogą być jeszcze wysłane, inaczej funkcja zwraca false z ostrzeżeniem.

Powiązane funkcje:
session_start()
session_id()
session_destroy()