AJAX игнорирует переменные сессии .Net - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть сайт MVC, который обрабатывает процесс входа в систему для нескольких приложений. Когда пользователь входит в систему, переменная сеанса создается в памяти приложения Login.

У приложения входа в систему есть действие контроллера, которое можно вызвать, чтобы проверить эту переменную сеанса (в контроллере) и, если она существует, возвращает представление для отображения кнопки выхода из системы. Если он не существует, он возвращает представление с кнопкой входа в систему.

На другом сайте мы можем загрузить это действие контроллера в iFrame, и кнопка отобразится так, как и должно быть.

Теперь нам нужны некоторые дополнительные функции для кнопки выхода из системы, включая раскрывающийся список для обновления настроек, имени пользователя, пароля и т. Д. Решение iFrame больше не работает, поскольку меню не может переполнить контейнер iFrame. Поэтому мы решили, что просто загрузим контент через AJAX. Но AJAX всегда возвращает кнопку входа, независимо от того, вошел ли пользователь в систему или нет.

Контроллер входа:

    public ActionResult LoginButton()
    {
        if (Session["User"] == null)
            return View("LoginButton");
        else
            return View("LogoutButton");
    }

Вид кнопки входа в систему:

@{
    Layout = "";
}

<span style="">
    <a href="https://www.example.com/Welcome" class="btn btn-primary" target="_top">Login</a>
</span>

Просмотр кнопки «Выход»:

@{
    Layout = "";
}

<span style="">
    <a href="https://www.example.com/" class="btn btn-primary" target="_top">Log Out</a>
</span>

Все это есть на siteA.com.

На сайте B.com ...

iFrame, который загружает кнопку выхода из системы, когда пользователь вошел в систему:

<iframe style="border:none; width:150px; height:50px;" scrolling="no" src="http://siteA.com/logInButton"></iframe>

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

<script type="text/javascript">
    $(document).ready(function () {
        $('#LogInOutBtn').load("http://siteA.com/logInButton"); 
    });
</script>                               
<div id=LogInOutBtn ></div>

Я также пробовал $ .get, но это тоже не работает.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Оказывается, это была проблема с CORS. Сеансовый cookie не был передан между доменами, потому что .load () и $ .get () не устанавливают для withCredentials (Access-Control-Allow-Credentials) значение true.

0 голосов
/ 26 апреля 2018

Не могли бы вы опубликовать, как вы установите свою сессию. Как я вижу, только код, который включает просто проверить объект сеанса, является нулевым или нет.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...