2015-12-15 2 views
5

В сценарии начала сеанса я выбираю имя session_name, а затем выполняю session_start.Как уничтожить два разных сеанса в одном скрипте php?

$session_name = rand(0,1) ? 'first' : 'second'; 
    session_name($session_name); 
    session_start(); 

Приведенный выше код работает при каждой загрузке страницы. После нескольких загрузок страниц, вероятно, будут сеансы как для session_name 'first', так и для session_name 'second'.

Это мой код, который находится в моем сценарии выхода из системы, чтобы попытаться уничтожить как эти сессии:

session_start(); 
session_name("first"); 
session_unset(); 
session_destroy(); 
session_write_close(); 

session_start(); 
session_name("second"); 
session_unset(); 
session_destroy(); 
session_write_close(); 

Сценарий выше уничтожает первый, но не второй. Если я запустил сценарий выхода во второй раз, он затем уничтожает второй сеанс, так как первый уже удален.

Как уничтожить сеансы для обоих имен сеансов в том же скрипте?

+0

Как проверить, если сессия уничтожается или нет? В ваших кодах говорится, что ваше второе имя сеанса даже не было применено к вашей сессии. –

+0

Исходный код был моим скриптом выхода, чтобы уничтожить сеансы. Сессии запускаются в другом месте изначально –

ответ

2

TRY IT

<?php 
    session_name("first"); 
    session_start(); 
    echo session_status(); 
    session_destroy(); 
    echo session_status(); 

    session_name("second"); 
    session_start(); 
    echo session_status(); 
    session_destroy(); 
    echo session_status(); 
?> 

Я проверил его на XAMPP и возвращает значения 2121 значение сеанса активен, их нет, сессия активна, никто не существует.

Я поставил session_name() до session_start(), потому что установка имени, как и вы, не вступила в силу после того, как сеанс уже запущен. Я искал его, и он должен что-то сделать с файлом php.ini, где session.auto_start имеет значение «true».

Объяснение и дискуссия по этой теме можно найти здесь: http://php.net/manual/en/function.session-name.php - отметьте комментарии.

EDITED:

После повторного рассмотрения вашего редактирования, вы в принципе не создают две сессии, но только один, и он начинает со случайным именем «первый» или «второй». Вы можете уничтожить сеанс, но файл cookie останется. Я проверил ваш код на xampp, и он делает именно это. Сначала php запускает один сеанс и сохраняет cookie с временным значением «session», после перезагрузки страницы он снова загрузит один из двух параметров, но на этот раз он изменит существующее время файла cookie на «N/A». Вы должны искать решение, чтобы очистить вас куки на вашем домене после загрузки страницы следующим образом:

<?php 
    $session_name = rand(0,1) ? 'first' : 'second'; 
    session_name($session_name); 
    session_start(); 

    deleteCookies($session_name); 

    function deleteCookies($skip_this_one) { 
     if (isset($_SERVER['HTTP_COOKIE'])) { 
     $cookies = explode(';', $_SERVER['HTTP_COOKIE']); 
     foreach($cookies as $cookie) { 
      $parts = explode('=', $cookie); 
      $name = trim($parts[0]); 
      if ($name == $skip_this_one) { 
       //skip 
      }else{ 
       setcookie($name, '', time()-1000); 
       setcookie($name, '', time()-1000, '/'); 
      } 
     } 
    } 
    //do something inside your session 
    //when done, stop the session the way you want 
    session_destroy(); 
} 
?> 

Это удалит все предыдущие куки и сохранить текущую сессию открытой.

Это решения переписан здесь: how to delete all cookies of my website in php

Надеется, что это помогает :)

+0

Прочитайте имена сеансов. –

+0

Тогда ваш вопрос, вероятно, был дан здесь: http://stackoverflow.com/questions/10703721/how-delete-session-by-the-name – c00ki3s

+0

Вот и весь вопрос моего вопроса.Выполнение этого для * двух * разных сеансов в одном скрипте не работает. Он отлично работает для одного сеанса. –

-1

Пожалуйста, попробуйте ниже кода

<?php unset($_SESSION['name']); // will delete just the name data 
session_destroy(); // will delete ALL data associated with that user. 
?> 
Смежные вопросы