2011-02-07 4 views
3

Должно быть, я действительно глуп, потому что это кажется довольно очевидной вещью, которая меня совершенно сбивает с толку.Почему моя сессия остается?

У меня сессия ...

т.е. $_SESSION['handbag_id'];

и в какой-то момент, мне нужно, чтобы полностью убить эту сессию.

т.е.

// at the start of the page 
session_start(); 

// elsewhere on the same page 
unset($_SESSION); 
session_destroy(); 

И все же, я могу затем перейти на другую страницу, и сделать

echo $_SESSION['handbag_id']; 

И я до сих пор получил тот же handbag_id, как и раньше.

Что мне не хватает? Разве я не понимаю, как это работает или у меня есть какая-то настройка сервера, которая господствует над моим желанием уничтожить его ценности?

+4

нет такой функции destroy_session(); –

+0

- ваш идентификатор сеанса в URL-адресе ??? – powtac

+0

Как сказал полк, это должно быть session_destroy – Ashley

ответ

3

функции Session может быть очень сложно. Чтобы полностью убить сеанс, вам необходимо присвоить новое значение супермагнетику $_SESSION. В противном случае все, что вы делаете, - это выгрузка данных сеанса из текущего сценария. Это должно работать:

session_start(); 
$_SESSION = array(); 
session_write_close(); // Not required 

Если вам также необходимо, чтобы открыть совершенно новую сессию, вы можете сделать это:

session_regenerate_id(FALSE); 
$tmp = session_id(); 
session_destroy(); 
session_id($tmp); 
unset($tmp); 
session_start(); 

Update:

Смежный вопрос вы можете найти полезным: Close session and start a new one

+0

Выглядит немного сумасшедшим, я уверен, что вы можете просто сделать это: 'session_destroy(); session_start(); session_regenerate_id(); ' – Leigh

+1

@Leigh - Он выглядит безумным, пока вы не проведете некоторое тестирование. Шутки в сторону. Ваш код, вероятно, оставит старую сессию стоящей, готовой к восстановлению, если вы знаете старый идентификатор. –

+0

Спасибо за это. Я попробовал, но этот session_destroy() вызывает ошибку, в которой нет сеанса, инициализированного для уничтожения. – willdanceforfun

3

Не делайте этого

unset($_SESSION); 

ли это

$_SESSION = array(); 

И наконец

session_destroy(); 
+1

спасибо. hmm .. но у меня все еще есть моя сессия – willdanceforfun

0

session_comitt до печати и просмотра магии :)