【问题标题】:AJAX ignoring .Net Session VariablesAJAX 忽略 .Net 会话变量
【发布时间】:2018-04-26 17:22:31
【问题描述】:

我有一个 MVC 站点来处理一些应用程序的登录过程。当用户登录时,会在登录应用程序的内存中创建一个会话变量。

登录应用程序有一个可以调用的控制器操作,它检查该会话变量(在控制器中),如果它存在,则返回一个视图以显示一个注销按钮。如果不存在,则返回一个带有登录按钮的视图。

在另一个站点上,我们可以在 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 上。

在siteB.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 但这也不起作用。

【问题讨论】:

    标签: javascript .net ajax session


    【解决方案1】:

    能否请您发布您如何设置会话。正如我所看到的,仅包含检查会话对象是否为空的代码。

    请更新更多代码,以便我们以适当的方式帮助您

    【讨论】:

      【解决方案2】:

      原来这是一个 CORS 问题。会话 cookie 未跨域传递,因为 .load() 和 $.get() 未将 withCredentials (Access-Control-Allow-Credentials) 设置为 true。

      【讨论】:

        猜你喜欢
        • 2018-07-05
        • 2012-12-12
        • 2013-01-17
        • 2017-12-14
        • 1970-01-01
        • 1970-01-01
        • 2015-07-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多