2010-11-11 4 views
3

Я пытаюсь выйти из моей страницы, но session_destroy и настройка файлов cookie не работает. Вот мой код:session_destroy() и setcookie fail

$page = $_GET["page"]; 
    if ($page == "logout") { 
if (ini_get("session.use_cookies")) { 
    $params = session_get_cookie_params(); 
    setcookie(session_name(), '', time() - 42000, 
     $params["path"], $params["domain"], 
     $params["secure"], $params["httponly"] 
    ); 
} 

session_destroy(); 


echo <<<html 
     <br /><br /><br /><p align="center"><b><font color="#000080">You've successfully logged out.</font></b></p> 
     <p align="right"><b><font size="3" color="#FF0000">Redirecting...</font></b></td> 
html; 
echo ("<META HTTP-EQUIV=Refresh CONTENT=\"4; URL=index.php\">"); 
exit(); 

Но его не работает - сеанс не уничтожается, а файлы cookie остаются неизменными. Я также пытался просто настроить cookie на другое значение без успеха. Другие части кода создают файлы cookie, доступ и их использование, но в части выхода из системы я не могу их уничтожить. Может ли кто-нибудь сказать мне, что здесь не так? Должны ли файлы cookie и сеансы быть установлены/отключены/уничтожены в начале страницы, например session_start? Или что-то еще не так?

+0

Это ваш полный выход? –

ответ

4

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

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

+0

Я думал, что есть что-то с этим делать. Я просто не хотел обходиться со сценарием, прежде чем у меня возникло мнение другого человека. – DreamWave

1

Вы должны вызвать session_start() до того, как session_destroy() будет работать, поскольку session_destroy работает в текущем сеансе, который не существует, если вы не вызывали сеанс запуска.

+0

Да, у меня есть session_start() и session.auto_start в php.ini, если на то пошло. – DreamWave

1

На странице есть session_start() до session_destroy()? Это должно быть.

+1

Почему downvote? Эта информация правильная http://php.net/session_destroy – Treffynnon

+0

Да У меня есть session_start() и session.auto_start в php.ini, если на то пошло. – DreamWave

0

если мы не называем

session_start()

в начале страницы, мы не можем иметь переменные сессии для работы на этой странице.

+0

Да У меня есть session_start() и session.auto_start в php.ini для этого дело.. – DreamWave