使用javascript验证ASP.NET用户会话
ASP.NET MVC 3网站用户管理的标准演示包括以下登录过程:使用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
FormsAuthentication.SetAuthCookie
为来自浏览器的上传会话请求设置Cookie我可以从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示例中就是这样实现的。