Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript验证ASP.NET用户会话_Asp.net_Asp.net Mvc 3_Jquery_Asp.net Authentication - Fatal编程技术网

使用javascript验证ASP.NET用户会话

使用javascript验证ASP.NET用户会话,asp.net,asp.net-mvc-3,jquery,asp.net-authentication,Asp.net,Asp.net Mvc 3,Jquery,Asp.net Authentication,ASP.NET MVC 3网站用户管理的标准演示包括以下登录过程: 用户输入身份验证数据 数据被发布到服务器 处理身份验证尝试的代码使用DB检查提供的数据 如果一切正常-调用FormsAuthentication.SetAuthCookie为来自浏览器的上传会话请求设置Cookie 并将用户重定向到任何地方 我想实现一个纯jQuery.Ajax-ASP.NET登录机制 我可以从js调用MVC站点操作,没有问题。但是我如何从JS代码中手动获取这个FormsAuthentication.SetAut

ASP.NET MVC 3网站用户管理的标准演示包括以下登录过程:

  • 用户输入身份验证数据
  • 数据被发布到服务器
  • 处理身份验证尝试的代码使用DB检查提供的数据
  • 如果一切正常-调用
    FormsAuthentication.SetAuthCookie
    为来自浏览器的上传会话请求设置Cookie
  • 并将用户重定向到任何地方
  • 我想实现一个纯jQuery.Ajax-ASP.NET登录机制


    我可以从js调用MVC站点操作,没有问题。但是我如何从JS代码中手动获取这个
    FormsAuthentication.SetAuthCookie
    cookie数据,并将其放入浏览器cookie存储中呢?如何在服务器上或jQuery.ajax成功代码中提取它们?

    安装MVC4测试版,默认的Internet模板提供了一种ajax身份验证机制,您可以将其窃取并放入MVC3应用程序中


    或者只使用MVC4,因为MVC4可能会在未来几个月发布。目前的MVC4测试版还有一个上线许可证,因此,如果您愿意,您甚至可以使用它上线。

    使用MVC 3,您可以为登录按钮设置onclick事件,然后发送和ajax POST到登录操作。让登录操作返回JSON结果,并控制从javascript函数向何处发送用户

    [HttpPost]
    public JsonResult LogOn(LogOnModel model, string returnUrl)
    {
        if (ModelState.IsValid)
        {
            //Do your authentication
            FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
            return Json(true);
        }
    
    // If we got this far, something failed, redisplay form
        return Json(false);
    }
    
    在视图中,向表单添加一个Id,并在按钮上放置一个单击处理程序

    <% using (Html.BeginForm("LogOn", "Account", FormMethod.Post, new { Id = "frmLogOn" }))
       { %>
        <%: Html.ValidationSummary(true, "Login was unsuccessful. Please correct the errors and try again.")%>
        <div>
            <fieldset>
                <legend>Account Information</legend>
    
                <div class="editor-label">
                    <%: Html.LabelFor(m => m.UserName)%>
                </div>
                <div class="editor-field">
                    <%: Html.TextBoxFor(m => m.UserName)%>
                    <%: Html.ValidationMessageFor(m => m.UserName)%>
                </div>
    
                <div class="editor-label">
                    <%: Html.LabelFor(m => m.Password)%>
                </div>
                <div class="editor-field">
                    <%: Html.PasswordFor(m => m.Password)%>
                    <%: Html.ValidationMessageFor(m => m.Password)%>
                </div>
    
                <div class="editor-label">
                    <%: Html.CheckBoxFor(m => m.RememberMe)%>
                    <%: Html.LabelFor(m => m.RememberMe)%>
                </div>
    
                <p>
                    <input type="submit" value="Log On" onclick="clicked(); return false;" />
                </p>
            </fieldset>
        </div>
    <% } %>
    <script type="text/javascript">
        function clicked() {
            var form = $('#frmLogOn');
            $.ajax({
                type: 'POST',
                url: '/Account/LogOn',
                data: form.serializeObject(),
                success: function (result) {
                    if (result == true) {
                        alert("success");
                        window.top.location = "/Home/Index";
                    }
                    else {
                        alert("failure");
                    }
                },
                error: function (data) {
                    alert("error");
                }
            });
        }
    </script>
    
    
    帐户信息
    m、 用户名)%%>
    m、 用户名)%%>
    m、 用户名)%%>
    m、 密码)%%>
    m、 密码)%%>
    m、 密码)%%>
    m、 记住)%>
    m、 记住)%>
    
    

    函数单击(){ 变量形式=$('frmLogOn'); $.ajax({ 键入:“POST”, url:“/Account/LogOn”, 数据:form.serializeObject(), 成功:功能(结果){ 如果(结果==真){ 警惕(“成功”); window.top.location=“/Home/Index”; } 否则{ 警报(“故障”); } }, 错误:函数(数据){ 警报(“错误”); } }); }
    不是jQuery-

    我现在将研究它。你为什么提到许可证?它与启动MVC3或MV4网站有什么关系?我是否被法律限制以任何方式使用该代码?@MaximV.Pavlov-大多数来自Microsoft的Beta不允许您在生产网站中使用该代码,除非您获得上线许可证。他们已经为MVC4测试版颁发了这样的许可证。在本例中,身份验证cookie将设置在何处?它们如何到达客户端浏览器并写入cookie存储?登录操作中对FormsAuthentication.SetAuthCookie()的调用将在对/Account/LogOn的POST调用的响应中设置cookie。该cookie将在客户端创建,然后如果您将用户的浏览器发送到需要授权的URL,它将使用cookie。我将检查它是否确实从ajax调用中读取cookie-将标记为应答。谢谢。实际上,在ASP.NETMVC4beta示例中就是这样实现的。