[实战]MVC5+EF6+MySql企业网盘实战(6)——ajax方式登录
写在前面
今天回来的比较早,就趁着有空,把登录的代码更新一下。上篇文章实现了ajax的注册,这篇将实现登录,实现目标,ajax登录方式,如果勾选记住我,则下次不再输入用户名密码,直接跳转到网盘界面。
系列文章
[EF]vs15+ef6+mysql code first方式
[实战]MVC5+EF6+MySql企业网盘实战(2)——用户注册
[实战]MVC5+EF6+MySql企业网盘实战(3)——验证码
[实战]MVC5+EF6+MySql企业网盘实战(4)——上传头像
[实战]MVC5+EF6+MySql企业网盘实战(5)——登录界面,头像等比例压缩
[实战]MVC5+EF6+MySql企业网盘实战(5)——页面模板
[实战]MVC5+EF6+MySql企业网盘实战(5)——ajax方式注册
[实战]MVC5+EF6+MySql企业网盘实战(6)——ajax方式登录
代码
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="企业,网盘,企业网盘">
<meta name="author" content="Muhammad Usman">
<title>登录</title>
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<link href="~/Content/Css/bootstrap-cerulean.min.css" rel="stylesheet" />
<link href="~/Content/Css/charisma-app.css" rel="stylesheet" />
<link href="~/Content/Css/jquery.noty.css" rel="stylesheet" />
<link href="~/Content/Css/elfinder.min.css" rel="stylesheet" />
<link href="~/Content/Css/elfinder.theme.css" rel="stylesheet" />
<link href="~/Content/Css/jquery.iphone.toggle.css" rel="stylesheet" />
<link href="~/Content/Css/animate.min.css" rel="stylesheet" />
<script>
$(function () {
//多选框
$("#chkRemember").click(function () {
if (!$(this).attr("checked")) {
$(this).attr("checked", 'checked');
} else {
$(this).removeAttr("checked");
};
});
//为登录按钮注册单击事件
$('#btnLogin').click(function () {
$.ajax({
type: "post",
url: "/UserInfo/Login",
data: { userName: $("#txtUserName").val(), pwd: $("#txtPwd").val(), remember: $("#chkRemember").attr('checked') },
dataType: "json",
success: function (data) {
console.log(data);
data = JSON.parse(data);
if (data.code == 200) {
} else {
$("#loginMsg").html("<span style='color:red;'>"+data.msg+"</span>");
};
}, error: function (msg) {
alert(data);
}
});
});
});
</script>
</head>
<body>
<div class="row">
<div class="row">
<div class="col-md-12 center login-header">
<h2>欢迎使用 Wolfy企业网盘</h2>
</div>
<!--/span-->
</div><!--/row-->
<div class="container">
<div class="row">
<div class="well col-md-5 center login-box">
<div class="alert alert-info" id="loginMsg">
请使用用户名和密码登录
</div>
<fieldset>
<div class="input-group input-group-lg">
<span class="input-group-addon"><i class="glyphicon glyphicon-user red"></i></span>
<input type="text" class="form-control" id="txtUserName" placeholder="用户名">
</div>
<div class="clearfix"></div><br>
<div class="input-group input-group-lg">
<span class="input-group-addon"><i class="glyphicon glyphicon-lock red"></i></span>
<input type="password" class="form-control" id="txtPwd" placeholder="密码">
</div>
<div class="clearfix"></div>
<div class="input-prepend">
<label class="remember" for="chkRemember"><input type="checkbox" name="chkRemember" id="chkRemember" value="1" /> 记住我</label>
</div>
<div class="clearfix"></div>
<p class="center col-md-5">
<button type="button" class="btn btn-primary" id="btnLogin">登录</button>
</p><a href="/UserInfo/Register" class="right" style="float:right;">注册</a>
</fieldset>
</div>
<!--/span-->
</div><!--/row-->
</div><!--/fluid-row-->
</div>
</body>
</html>
Login.cshtml
目前还是使用session来保持状态,使用在action上加特性的方式,留待以后优化。
[HttpGet]
public ActionResult Login()
{
UserInfo userInfo = null;
if (Request.Cookies["n"] != null && Request.Cookies["p"] != null)
{
string userName = Request.Cookies["n"].Value;
string pwd = Request.Cookies["p"].Value;
userInfo = _userInfoServiceRepository.Find(x => x.UserName == userName && x.Pwd == pwd);
if (userInfo!=null)
{
if (Session["user"] == null)
{
Session["user"] = userInfo;
}
//更新最后一次登录时间
userInfo.LoginDt = DateTime.Now;
_userInfoServiceRepository.Update(userInfo);
_userInfoServiceRepository.SaveChanges();
} }
return View();
}
/// <summary>
/// 登录
/// </summary>
/// <param name="userName"></param>
/// <param name="code"></param>
/// <returns></returns>
[HttpPost]
public JsonResult Login(string userName, string pwd, string remember)
{
if (!_userInfoServiceRepository.Exist(userName))
{
return new JsonResult() { Data = "{\"code\":500,\"msg\":\"用户名不存在\"}" };
}
if (!string.IsNullOrEmpty(pwd))
{
pwd = MD5Helper.GetMD5FromString(pwd);
}
else
{
return new JsonResult() { Data = "{\"code\":500,\"msg\":\"密码不能为空\"}" };
}
UserInfo userInfo = _userInfoServiceRepository.Find(x => x.UserName == userName && x.Pwd == pwd);
if (userInfo == null)
{
return new JsonResult() { Data = "{\"code\":500,\"msg\":\"用户名和密码不匹配\"}" };
}
if (!string.IsNullOrEmpty(remember) && remember.Equals("checked"))
{
HttpCookie nameCookie = new HttpCookie("n", userName);
nameCookie.Expires = DateTime.Now.AddDays();
//将md5串写入cookie,或者再次进行AES加密写入
HttpCookie pwdCookie = new HttpCookie("p", pwd);
pwdCookie.Expires = DateTime.Now.AddDays();
Response.Cookies.Add(nameCookie);
Response.Cookies.Add(pwdCookie);
}
//登录成功写入session
Session["user"] = userInfo;
//更新登录状态
userInfo.LoginDt = DateTime.Now;
_userInfoServiceRepository.Update(userInfo);
_userInfoServiceRepository.SaveChanges();
return new JsonResult() { Data = "{\"code\":200,\"msg\":\"登录成功\"}" };
}
测试


登录成功后,跳转到FileList页面。
总结
关于ajax方式登录的内容就到这里。下面将进入网盘的主页。
[实战]MVC5+EF6+MySql企业网盘实战(6)——ajax方式登录的更多相关文章
- [实战]MVC5+EF6+MySql企业网盘实战(28)——其他列表
写在前面 本篇文章将实现,其他文件类型的列表. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) [实战]MVC5+EF ...
- [实战]MVC5+EF6+MySql企业网盘实战(27)——应用列表
写在前面 本篇文章将实现应用列表,同样和其他列表的不同之处,在于查询条件的不同. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘 ...
- [实战]MVC5+EF6+MySql企业网盘实战(4)——上传头像
写在前面 最近又开始忙了,工期紧比较赶,另外明天又要去驾校,只能一个功能一个功能的添加了,也许每次完成的功能确实不算什么,等将功能都实现了,然后在找一个好点的ui对前端重构一下. 系列文章 [EF]v ...
- [实战]MVC5+EF6+MySql企业网盘实战(2)——验证码
写在前面 断断续续,今天算是把验证码的东东弄出来了. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) [实战]MVC5 ...
- [实战]MVC5+EF6+MySql企业网盘实战(2)——用户注册
写在前面 上篇文章简单介绍了项目的结构,这篇文章将实现用户的注册.当然关于漂亮的ui,这在追后再去添加了,先将功能实现.也许代码中有不合适的地方,也只有在之后慢慢去优化了. 系列文章 [EF]vs15 ...
- [实战]MVC5+EF6+MySql企业网盘实战(1)
写在前面 不久前,一个朋友让帮他弄一个单位的企业网盘的管理站点,一直忙,最近抽出了点时间,也想琢磨琢磨mvc,ef,mysql,这算是边琢磨,边实践吧. 系列文章 [实战]MVC5+EF6+MySql ...
- [实战]MVC5+EF6+MySql企业网盘实战(26)——音乐列表
写在前面 本篇文章将实现,音乐列表,同样和其他列表的不同之处,在于查询条件的不同. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网 ...
- [实战]MVC5+EF6+MySql企业网盘实战(25)——种子列表
写在前面 上篇文章实现了视频列表,本篇文章继续实现其他的文件列表.功能相似.这里就不再赘述. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MyS ...
- [实战]MVC5+EF6+MySql企业网盘实战(24)——视频列表
写在前面 上篇文章实现了文档列表,所以实现视频列表就依葫芦画瓢就行了. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) ...
- [实战]MVC5+EF6+MySql企业网盘实战(23)——文档列表
写在前面 上篇文章实现了图片列表,这篇文章实现文档列表将轻车熟路,因为逻辑基本相似,只是查询条件的不同.这里将txt,doc,docx,ppt,pptx,xls,xlsx的文件都归为文档列表中. 系列 ...
随机推荐
- openssl生成https证书、转换证书格式的各种相关操作
第一步:生成 private key.csr等文件 我们可能需要输入以下信息(交互式): --- Country Name (2 letter code) [AU]:US State or Provi ...
- mysql ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)错误解决办法
我的电脑是win10,所用的是mysql5.7.14 近期在学习mysql数据库的时候,遇到了这个错误,我的密码错误了.突如其来的问题,很是蒙蔽,因为我没对数据库设置过密码.通过网上查询,可以通过进入 ...
- [吴恩达机器学习笔记]11机器学习系统设计3-4/查全率/查准率/F1分数
11. 机器学习系统的设计 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考资料 斯坦福大学 2014 机器学习教程中文笔记 by 黄海广 11.3 偏斜类的误差度量 Error Metr ...
- Java集合框架(set)
set继承自collection接口,其子类和子接口如下: set的共同特性:不能添加相同的元素,通常无法记住元素添加的顺序 1.HashSet类 判断两元素相同的标准:1.equals方法返回tru ...
- poi对word的操作(总结)
★★★ POI在读写word docx文件时是通过xwpf模块来进行的,其核心是XWPFDocument. 1.正文段落:一个文档包含多个段落Paragraph,一个段落包含多个Runs,一个R ...
- 26 THINGS I LEARNED IN THE DEEP LEARNING SUMMER SCHOOL
26 THINGS I LEARNED IN THE DEEP LEARNING SUMMER SCHOOL In the beginning of August I got the chance t ...
- AlloyTouch 简介
AlloyTouch 是来自于腾讯AlloyTeam团队开发的一个适用用移动端的js组件库. 特性: 1.丰富的组件 选择组件.级联选择组件.轮播组件.全屏滚动组件.下拉刷新组件.上拉刷新任君选择 2 ...
- JSDom
什么是Dom? 1.简介 文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.Document Object Model的历史可 ...
- thinkphp学习,蛋疼啊~新公司要弄这个。。。
common/function.php 看里面函数大全,啥玩意都有 Tpl中的是模板文件,action中是控制类,Model中有action用到的一些东西,例: class IndexAction e ...
- 2017ACM暑期多校联合训练 - Team 4 1004 HDU 6070 Dirt Ratio (线段树)
题目链接 Problem Description In ACM/ICPC contest, the ''Dirt Ratio'' of a team is calculated in the foll ...