Проверьте, вошел ли пользователь в систему на странице изменения ajax

Как часть веб-приложения, которое я создаю, мне нужно проверять, вошел ли пользователь в систему всякий раз, когда он меняет страницу. На обычном сайте без ajax это легко, потому что я могу просто поместить условный оператор сеанса PHP в заголовок, и заголовок, вызываемый при каждом изменении страницы, будет определять, отображается ли страница входа или нет, но видя как файл заголовка устанавливается только один раз в приложении ajax, которое находится при начальной загрузке, как я могу проверить, когда пользователь делает запрос страницы ajax, действительно ли сеанс все еще действителен? Поскольку я использую pushState и popState, я знаю, что могу установить условие для запуска всякий раз, когда URL-адрес изменяется, но я не знаю, как точно кодировать проверку для запуска всякий раз, когда это происходит.

Любая помощь приветствуется.

Спасибо.


person CoreyRS    schedule 20.08.2012    source источник
comment
просто создайте php-страницу, которая проверяет сеанс и возвращает true или false. Поэтому, если пользователь не вошел в систему, всякий раз, когда вы делаете запрос ajax, а сеанс не имеет информации о пользователе, возвращается только строка false, которую вы можете использовать для проверки обратного вызова ajax для отображения правильной информации.   -  person Pierre    schedule 21.08.2012
comment
ваше здоровье. опубликуйте это как ответ, чтобы я мог одобрить его.   -  person CoreyRS    schedule 21.08.2012


Ответы (2)


Вы должны вернуть false, чтобы вы могли сделать что-то разумное, например, перенаправить пользователя на страницу входа или изменить заголовок, как вы упомянули в своем вопросе, вместо того, чтобы убивать скрипт с помощью die('false')

i.e.

if(!isset($_SESSION['valid_user'])) { 

    return false;
}

или еще лучше, верните объект json в свой скрипт и используйте jquery/javascript для изменения заголовка.

$response = array();

if(!isset($_SESSION['valid_user'])) { 

    $response['logged_in'] = false;

} else {

    $response['logged_in'] = true;

}

// return to jquery for handling
return json_encode($response);

в любом случае, вы говорите, что создаете веб-приложение, поэтому вы можете попробовать обработать событие, а не убивать программу.

person mynewaccount    schedule 20.08.2012
comment
возврат объекта json со значением false или остановка скрипта с выходом как false выполняет то же самое. В обратном вызове ajax разница будет только в том случае, если (ответ == 'false'), или с json это будет if (response.logged_in == false). - person Pierre; 21.08.2012
comment
die() — самый примитивный способ обработки событий в php. так что, если вы пещерный человек на стороне клиента, который не против убить весь скрипт, когда что-то оценивается как false, тогда вперед, делайте, что хотите. но когда вы начнете делать более сложные вещи в php, вы поймете, что это плохая привычка, и тогда вы поймете, почему я только что назвал вас неандертальцем. без обид - person mynewaccount; 22.08.2012
comment
Без обид, так как я не клиентский разработчик. Хотя это плохая привычка, ОП нужен был способ проверить, действителен ли сеанс. Он не спрашивал, как правильно, поэтому я дал ему самую быструю реализацию, которая выполнит то, что ему нужно. Если бы он спросил как следует, то мой ответ был бы совсем другим. И зачем слишком усложнять вещи для кого-то, кто не может быть сильным разработчиком? Судя по вопросу, очевидно, что он не сильный разработчик, и, вероятно, был бы доволен простой реализацией вместо чрезмерного усложнения вещей, которые он может не понять. - person Pierre; 22.08.2012

Создайте php-страницу, которая проверяет сеанс и возвращает true или false.

Поэтому, если пользователь не вошел в систему, всякий раз, когда вы делаете запрос ajax, а сеанс не имеет информации о пользователе, возвращается только строка false, которую вы можете использовать для проверки обратного вызова ajax для отображения правильной информации.

E.G

if(!isset($_SESSION['user'])) die('false');

Затем в обратном вызове ajax вы можете проверить, является ли ответ ложным, или обработать данные другим способом, например.

$.ajax({"url" : url, "success" : function(response){
    if(response == 'false')
    {
        // display a login screen or redirect the user to a login page
        // E.G showLogin() or document.location = '/login.php';
    } else {
        // to something else with the response if the user is logged in
    }
});
person Pierre    schedule 20.08.2012