Как я могу проверить, является ли пользователь анонимным или вошел в систему из JavaScript? - PullRequest
9 голосов
/ 31 июля 2009

Я хотел бы определить, вошел ли пользователь в систему или он просто анонимен из javascript ...

Я нашел этот вопрос , но это php-код, и я не был уверен, есть ли переменная сеанса logged_in, которая хранится при входе в систему, или это было просто то, что этот человек реализовал сам. 1005 *

Кто-нибудь знает, как я могу проверить, вошел ли пользователь в javascript, возможно, используя ajax?

Редактировать: Я использую Asp.Net MVC, извините, должен был указать

Это сделано для того, чтобы я мог реализовать клиентский вход в AJAX. Когда страница загружается, мне нужно знать, вошел ли пользователь в систему или нет, чтобы я мог реализовать что-то похожее на элемент управления <asp:LoggedInView>, используя jquery.

Спасибо,
Matt

Ответы [ 7 ]

10 голосов
/ 31 июля 2009

Вы не можете прочитать сохраненные данные сеанса из JavaScript.

Простой способ сделать это - создать JS-переменную из PHP (проще, чем решение для файлов cookie), например:

if ($_SESSION['logged_in'] == 1) {
    echo '<script type="text/javascript">var logged_in=true;</script>';
} else {
    echo '<script type="text/javascript">var logged_in=false;</script>';
}

Тогда JS просто проверит собственный logged_in var, чтобы увидеть, вошел ли пользователь в систему.

<script type="text/javascript">
    if (logged_in) {
        alert("My user is logged in!");
    }
</script>
6 голосов
/ 31 июля 2009

[ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ] Поскольку я получаю так много комментариев от людей о том, что это «плохая практика», я просто скажу следующее: это плохая практика, делать это таким образом, но мы не знаем, что собирается сделать оригинальный постер. Насколько мы знаем, он сделал все остальное на 100% правильно и безопасно, и просто спрашивал, есть ли способ сделать это из javascript. То, что я сделал ниже, является моей лучшей идеей о том, как выполнить то, что он попросил. [/ ОТКАЗ]

Вы можете иметь свой php или любой другой используемый вами язык бэкэнда, установить cookie, который вы затем сможете прочитать с помощью javascript.

document.cookie

просто так. Вам придется искать в строке cookie имя вашего файла cookie, вошедшего в систему.

Вы также можете использовать это, чтобы установить cookie и выполнить вход через javascript (хотя, вероятно, не самая лучшая идея).

См. здесь для краткого обзора доступа к файлам cookie JavaScript.

[править]

Для решения проблемы клиентского скрипта, имеющего доступ к информации о сеансе, и возможного использования ajax, предложенного в первоначальном вопросе:

Да, вызов ajax был бы очень простым способом проверить это. Я больше похож на jQuery, так что мой опыт работы с ajax лежит здесь, но в основном вы бы вызывали ajax-вызов своей серверной функции, и эта серверная функция просто проверяла переменную сеанса loggedin, возвращая true или false.

Кроме того, поскольку вы уже упомянули, что используете jQuery, см. на этой странице , чтобы упростить доступ к файлам cookie jQuery. [/ Править]

2 голосов
/ 31 июля 2009

Это решение обычно реализуется на серверных языках. С JS вы, по крайней мере, может установить в своем клиенте cookie, где хранится эта информация.

Однако в Ajax у вас должна быть страница (например, check_login.jsp / .apsx и т. Д.), Где проверять если пользователь вошел в систему (доступ к БД, переменная Session и т. д.) и, если это так, вернется обратно в JS (через JSON) эту информацию и, например, подсветит DIV зеленым цветом ...

Итак:

check_login.aspx -> вернуть информацию через Response.Write("{user_logged:true}");

из login.aspx в вашем HTML-коде с JS у вас будет вызов AJAX, где ваш xmlhttp уже является экземпляром XMLHttpRequest объекта ...

var logged = JSON.parse(xmlhttp.responseText); // don't use eval
if(logged.user_logged)
document.getElementById("u_l").style.backgroundColor = "#00FF00";
1 голос
/ 12 апреля 2016

Лучший способ, по моему мнению, это сделать через ajax.

Это сделает это.

файл JS ...

        $.ajax({
            type: 'POST',
            dataType: 'json',
            url: 'check.php',
            success: function(d) { 
                if(d.r == "fail") {
                    window.location.href = d.url;
                } else {
                    console.log(d.msg);
                }
            }
        });

check.php

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

        $response = array(
            'r' => 'fail',
            'url' => '/home.php'
        );
    } else {

        $response = array(
            'r' => 'success',
            'msg' => 'Logged in'
        );
    }

    echo json_encode($response);
    exit;
1 голос
/ 31 июля 2009

Это не имеет никакого смысла. Если пользователь вошел в систему, вы знаете это на стороне сервера. Так что вам не нужно проверять, зарегистрированы ли вы на стороне клиента.

- РЕДАКТИРОВАТЬ:

После вашего разъяснения я могу только предложить проверить на контроллере, зарегистрирован ли пользователь, если да, то вы покажете нормальный вид, в противном случае вы увидите другой вид.

- РЕДАКТИРОВАТЬ добавлено Афоризм:

Некоторые люди, сталкиваясь с проблемой, думают: «Я знаю, я буду использовать ajax». Теперь у них как минимум две проблемы

0 голосов
/ 13 октября 2016

Вы можете проверить с помощью кода ниже:

if(jQuery('body').hasClass('logged-in')) {
 // add your jquery code
 }
0 голосов
/ 31 июля 2009

Вы можете разобрать document.cookie.

...