session_destroy не отключает session_id

Я работаю над онлайн-системами бронирования билетов, где после успешного бронирования (после оплаты) я хочу очистить идентификатор сеанса. Но дело в том, что я не могу его очистить, хотя я использовал session_destroy() для уничтожения сеанса.

NB: Я повторил session_id, чтобы проверить, не перезагружен ли он.

URL: http://7sisters.in/7sislabs/

 function book_final_tickets() { //var_dump($_SESSION); $session_id = session_id(); $sql = " UPDATE tbl_seat_book SET final_book = 'Y' WHERE session_id = '$session_id' "; //session_unset(); if($r = $this->db->executeQuery($sql)){ if(session_destroy()){ unset($session_id); echo 'Booking successfull'; } } } с function book_final_tickets() { //var_dump($_SESSION); $session_id = session_id(); $sql = " UPDATE tbl_seat_book SET final_book = 'Y' WHERE session_id = '$session_id' "; //session_unset(); if($r = $this->db->executeQuery($sql)){ if(session_destroy()){ unset($session_id); echo 'Booking successfull'; } } } 

Solutions Collecting From Web of "session_destroy не отключает session_id"

Вызовите session_id перед session_start и установите session_id вручную.

Пример 1: тот же session_id будет использоваться

 <?php session_start(); echo session_id(); //4ef975b277b52 session_destroy(); session_start(); echo session_id(); //4ef975b277b52 ?> 

Пример 2: установите session_id вручную ( session_start() перед session_start() )

 <?php session_id(uniqid()); session_start(); echo session_id(); //4ef975d3d52f5 (A) session_destroy(); session_id(uniqid()); session_start(); echo session_id(); //4ef975d3b3399 (B) ?> 

(A)! = (B), поэтому вы можете установить session_id вручную, см. http://php.net/manual/en/function.session-id.php для получения дополнительной информации.

Другое решение , не используйте session_id (), просто создайте новый массив сеансов:

 <?php $_SESSION['booked'] = false; if($r = $this->db->executeQuery($sql)) { $_SESSION['booked'] = true; echo 'Booking successfull'; } ?> 

Только session_destroy() не удаляет cookie на стороне клиента, поэтому при следующем посещении пользователя они все равно будут иметь одинаковый идентификатор сеанса (но их информация о сеансе на стороне сервера будет уничтожена).

Из документов (акцент мой):

session_destroy () уничтожает все данные, связанные с текущим сеансом. Он не отменяет никаких глобальных переменных, связанных с сеансом, или не удаляет cookie сеанса. … Чтобы полностью убить сеанс, как и для входа пользователя в систему, идентификатор сеанса также должен быть отменен . Если для распространения идентификатора сеанса (поведение по умолчанию) используется куки-файл, необходимо удалить куки-файл сеанса.

Вы можете использовать session_regenerate_id(true) для генерации нового идентификатора сеанса и удаления старого. Обратите внимание, что это будет содержать всю информацию в $_SESSION как часть нового идентификатора сеанса, поэтому вам все равно нужно использовать session_destroy если вы хотите очистить информацию о сеансе и начать новую.

например

 <?php session_start(); $_SESSION['blah'] = true; var_dump(session_id()); // q4ufhl29bg63jbhr8nsjp665b1 var_dump($_SESSION); // blah = true session_unset(); session_destroy(); setcookie("PHPSESSID", "", 1); // See note below session_start(); session_regenerate_id(true); var_dump(session_id()); // gigtleqddo84l8cm15qe4il3q3 var_dump($_SESSION); // (empty) ?> 

и в заголовках будет отображаться изменение идентификатора сеанса на стороне клиента:

Заголовок запроса
Cookie: PHPSESSID = q4ufhl29bg63jbhr8nsjp665b1

Заголовок ответа
Set-Cookie: PHPSESSID = удален; expires = Пн, 27-дек-2010 16:47:57 GMT
PHPSESSID = gigtleqddo84l8cm15qe4il3q3; Путь = /

(Вы можете уйти без setcookie() здесь, так как вы все равно создаете новый сеанс, поэтому cookie будет перезаписан новым идентификатором, но это хорошая практика для явного уничтожения старого файла cookie).

Попробуй это:

 unset($session_id); session_destroy(); с unset($session_id); session_destroy(); 

Вместо

session_destroy();

Я предпочел бы сделать только

session_regenerate_id(true);

и вы получите новый session_id

После разрушения сеанса session_destroy () это сработало для меня:

SetCookie ( 'PHPSESSID', "", время () – 3600, '/');

Ключ для меня устанавливал путь к '/'. Это был единственный способ действительно уничтожить куки.