не работает выход в php для входа в систему - PullRequest
0 голосов
/ 10 июня 2009

Я внедряю систему входа в систему, я уверен, что многие из вас знают, что это такое, я использую сеансы для хранения идентификатора пользователя и проверяю, имеет ли он доступ к странице, на которой требуется войти в систему.
Но моя проблема в том, что когда пользователь нажимает на якорь выхода из системы, ничего не происходит, я все равно могу получить доступ к другим страницам, пока открыта текущая страница.
Вот код использования:

<?
unset($_SESSION["ID"]);
session_destroy();
header('location: ../Home/index.php');
?>

так что любой может помочь. заранее спасибо.

Ответы [ 5 ]

6 голосов
/ 10 июня 2009

Вам нужно сделать session_start() до session_destroy().

Если нет, PHP не знает, какую сессию вы пытаетесь уничтожить.

2 голосов
/ 10 июня 2009
2 голосов
/ 10 июня 2009

Но моя проблема в том, когда пользователь нажимает якорь выхода из системы, ничего не происходит

Многое происходит!

  1. Вы пытаетесь вернуться с помощью предыдущей кнопки и затем получить доступ к странице входа, на которой вы снова входите в систему?

  2. Вы действительно проверяете сеанс, когда пользователь пытается отобразить?

  3. Вы уверены, что НЕ отображаете кэшированную версию своей страницы?

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

  5. Проверьте синтаксис заголовка местоположения, RFC2616 14.30 говорит:

Поле заголовка ответа Location: используется для перенаправления получателя на местоположение, отличное от Request-URI для завершения запроса или выявление нового ресурса. За 201 (Создано) ответов, Местоположение это новый ресурс, который был создан по запросу. Для 3xx ответы, местоположение ДОЛЖНО указать предпочитаемый URI сервера для автоматического перенаправления на ресурс. Значение поля состоит из один абсолютный URI.

   Location       = "Location" ":" absoluteURI

Попробуйте:

var_dump($_SESSION);

На каждой странице вы увидите, что на самом деле происходит.

1 голос
/ 10 июня 2009

Скорее всего, вам также нужно удалить сессионный cookie:

unset($_SESSION["ID"]);
if (isset($_COOKIE[session_name()])) {
    setcookie(session_name(), '', time()-42000, '/');
}
session_destroy();
//...
0 голосов
/ 11 августа 2012

На странице выхода это должно быть так, как показано ниже

<?php
    session_start()
    unset($_SESSION["ID"]);
    session_destroy();
    header('Location: http://example.com/home');
?>

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

<?php
    session_start()
    if(!isset($_SESSION["ID"]) || empty($_SESSION["ID"])) {
        // redirect to login page
        header('Location: http://example.com/login');
    }
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...