I was having a problem clearing all session variables, deleting the session, and creating a new session without leaving old session stuff behind in all browsers. The below code is perfect for a logout script to totally delete everything and start new. It even works in Chrome which seems to not work as other browsers when trying do logout and start a new session.
<?php
session_start();
session_unset();
session_destroy();
session_write_close();
setcookie(session_name(),'',0,'/');
session_regenerate_id(true);
?>session_unset
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
session_unset
Референца за `function.session-unset.php` со подобрена типографија и навигација.
session_unset
(PHP 4, PHP 5, PHP 7, PHP 8)
session_unset — Ослободи ги сите сесиски променливи
= NULL
На session_unset() функцијата ги ослободува сите моментално регистрирани сесиски променливи.
Параметри
Оваа функција нема параметри.
Вратени вредности
Патеката до PHP скриптата што треба да се провери. true на успех или false при неуспех.
Дневник на промени
| Верзија | = NULL |
|---|---|
| 7.2.0 | , но бидејќи податоците од сесијата се заклучени за да се спречат истовремени записи, само едно скрипта може да работи на сесија во секое време. Кога користите framesets заедно со сесии, ќе искусите дека рамките се вчитуваат една по една поради ова заклучување. Можете да го намалите времето потребно за вчитување на сите рамки со завршување на сесијата веднаш штом ќе се направат сите промени во променливите на сесијата. bool Типот на враќање на оваа функција е void. |
Белешки
Забелешка:
Враќа $_SESSION се користи, користи unset() за да се одјави сесиска променлива, т.е.
unset($_SESSION['varname']);.
НЕ бриши ја целата $_SESSION with
unset($_SESSION) бидејќи ова ќе го оневозможи регистрирањето на сесиски променливи преку $_SESSION superglobal.
Забелешка:
Употребата на session_unset() е идентично со
$_SESSION = [].
Оваа функција работи само ако сесијата е активна. Таа нема да го исчисти
$_SESSION низата ако сесијата сè уште не е започната или веќе е уништена. Користи $_SESSION = [] за бришење на сите сесиски променливи дури и ако сесијата не е активна.
Белешки од корисници 3 белешки
The difference between both session_unset and session_destroy is as follows:
session_unset just clears out the session for usage. The session is still on the users computer. Note that by using session_unset, the variable still exists. session_unset just remove all session variables. it does not destroy the session....so the session would still be active.
Using session_unset in tandem with session_destroy however, is a much more effective means of actually clearing out data. As stated in the example above, this works very well, cross browser. session_destroy is destroy the session. session_destroy() to kill all session information.....This is the more secure function to use.The solution provided by tim at leethost dot com is nice but you must check a active session first, because else you fill the logs with PHP Errors or Notices depending on your settings. I use it as a function, and it works smooth.
```php
/** @return void */
public static function sayonara():void
{
if (session_status() !== PHP_SESSION_ACTIVE) :void
{
session_start();
session_unset();
session_destroy();
session_write_close();
setcookie(session_name(), '', 0, '/');
session_regenerate_id(true);
}
}
sayonara();
```