(三)学习MVC之密码加密及用户登录
1.密码加密采用SHA256 算法,此类的唯一实现是 SHA256Managed。在Common/Text.cs里添加Sha256方法:
public static string Sha256(string plainText)
{
SHA256Managed _sha256 = new SHA256Managed();
byte[] _cipherText = _sha256.ComputeHash(Encoding.Default.GetBytes(plainText));
return Convert.ToBase64String(_cipherText);
}
2.在Repository/UserRepository.cs添加Authentication方法,用来验证登录时用户名和密码是否正确。
/// <summary>
/// 用户验证【0-成功;1-用户名不存在;2-密码错误】
/// </summary>
/// <param name="UserName"></param>
/// <param name="PassWrod"></param>b
/// <returns></returns>
public int Authentication(string UserName, string PassWrod)
{
var _user = dbContext.Users.SingleOrDefault(u => u.UserName == UserName);
if (_user == null) return ;
else if (_user.Password != PassWrod) return ;
else return ;
}
3.在Model/User.cs添加用户登录模型
/// <summary>
/// 用户登陆模型
/// </summary>
public class UserLogin
{
/// <summary>
/// 用户名
/// </summary>
[Display(Name = "用户名", Description = "4-20个字符。")]
[Required(ErrorMessage = "×")]
[StringLength(, MinimumLength = , ErrorMessage = "×")]
public string UserName { get; set; }
/// <summary>
/// 密码
/// </summary>
[Display(Name = "密码", Description = "6-20个字符。")]
[Required(ErrorMessage = "×")]
[StringLength(, MinimumLength = , ErrorMessage = "×")]
[DataType(DataType.Password)]
public string Password { get; set; }
/// <summary>
/// 验证码
/// </summary>
[Display(Name = "验证码", Description = "请输入图片中的验证码。")]
[Required(ErrorMessage = "×")]
[StringLength(, MinimumLength = , ErrorMessage = "×")]
public string VerificationCode { get; set; } }
4.修改Countrol/UserControl.cs,添加Login相关代码:
public ActionResult Login()
{
return View();
}
//使用Cookie保存登陆账号,密码等信息
[HttpPost]
public ActionResult Login(UserLogin login)
{
//验证验证码
if (Session["VerificationCode"] == null || Session["VerificationCode"].ToString() == "")
{
Error _e = new Error { Title = "验证码不存在", Details = "在用户注册时,服务器端的验证码为空,或向服务器提交的验证码为空", Cause = "<li>你注册时在注册页面停留的时间过久页已经超时</li><li>您绕开客户端验证向服务器提交数据</li>", Solution = "返回<a href='" + Url.Action("Register", "User") + "'>注册</a>页面,刷新后重新注册" };
return RedirectToAction("Error", "Prompt", _e);
}
else if (Session["VerificationCode"].ToString() != login.VerificationCode.ToUpper())
{
ModelState.AddModelError("VerificationCode", "×");
return View();
}
//验证账号密码
/// <summary>
/// 用户验证【0-成功;1-用户名不存在;2-密码错误】
/// </summary>
userRsy = new UserRepository();
int n=userRsy.Authentication(login.UserName, Common.Text.Sha256(login.Password));
if(n==){
ModelState.AddModelError("Message", "用户名不存在!");
return View();
}
else if(n==){
ModelState.AddModelError("Message", "密码输入错误!");
return View();
}
else{
HttpCookie _cookie = new HttpCookie("User");
_cookie.Values.Add("UserName", login.UserName);
_cookie.Values.Add("Password", Common.Text.Sha256(login.Password));
Response.Cookies.Add(_cookie);
return RedirectToAction("Default", "User");
} }
5.在 public ActionResult Login() 上右键添加强类型视图:

6.视图完成代码:
@model LoginExample.Models.UserLogin
@{
ViewBag.Title = "用户登陆";
Layout = "~/Views/Shared/_Layout.cshtml";
}
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<div class="form">
<dl>
<dt>用户登陆</dt>
<dd>
<div class="label">@Html.LabelFor(model => model.UserName):</div>
<div class="ctrl">
@Html.EditorFor(model => model.UserName)
@Html.ValidationMessageFor(model => model.UserName)
@Html.DisplayDescriptionFor(model => model.UserName)
</div>
</dd>
<dd>
<div class="label">@Html.LabelFor(model => model.Password):</div>
<div class="ctrl">
@Html.PasswordFor(model => model.Password)
@Html.ValidationMessageFor(model => model.Password)
@Html.DisplayDescriptionFor(model => model.Password)
</div>
</dd>
<dd>
<div class="label">验证码:</div>
<div class="ctrl">
@Html.TextBoxFor(model => model.VerificationCode)
@Html.ValidationMessageFor(model => model.VerificationCode)
<img id="verificationcode" alt="" src="@Url.Action("VerificationCode", "User")" />
<a id="trydifferent" style="cursor: pointer">换一张</a>
</div>
</dd>
<dd>
<div class="label"></div>
<div class="ctrl">
<input type="submit" value="登陆" />@Html.ValidationMessage("Message")
</div>
<div class="ctrl">
@Html.ActionLink("注册","Register")
</div>
</dd>
</dl>
<div class="clear"></div>
</div>
}
<script type="text/javascript">
$("#trydifferent").click(function () {
$("#verificationcode").attr("src", "/User/VerificationCode?" + new Date());
})
</script>
7.运行Login.cshtml,结果:

8.结束。
(三)学习MVC之密码加密及用户登录的更多相关文章
- centos7 设置grub密码及单用户登录实例
centos7与centos6在设置grub密码的操作步骤上有很大的差别,特此记录供以后查用 grub加密的目的: 防止不法分子利用单用户模式修改root密码 给grub加密可以采用明文或者加密的密文 ...
- MVC中实现只有当用户登录成功的时候才等浏览内容,否则跳转到登录页面
第一步,在登录的时候记录Session //提供Session接口方便后面判断用户登录 Session["UserInfo"] = uinfo; //uInfo是用户登录Mode ...
- java struts2入门学习实例--用户注册和用户登录整合
需求: 1.用户注册(user_register.jsp)-->注册成功(UserRegister.action)-->显示注册信息(register_success.jsp)2.用户登录 ...
- (三)使用Jmeter模拟300个用户登录
1.首先在系统中创建300个用户(在这里使用 pl/sql 进行循环创建): 代码如下: --先对原先的表进行备份 :CREATE TABLE sys_user_bak AS SELECT * FRO ...
- MVC 自定义特性(验证用户登录session是否已经过期)
新建一个类 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)] publ ...
- Cognos权限认证CJP方式之用户密码加密
在项目开发过程中,用户往往对系统的安全都有明确的要求,下面针对cognos门户认证用户密码如何加密来提供一个简单的wf 1Cognos权限认证方式:CJP 2Cognos用户数据库类型:Oracle ...
- iOS 注册密码加密 添加了时间戳 遇到的问题...
今天项目 遇到一个事故,我本想用 一个形容这个事故的adj 算了 既然 叫事故 已经能表达我们处于的一种状态, 是这样的: 有小部分用户反应 app无法注册 总提示密码错误的情况 实际 该步骤 已经 ...
- 利用 John the Ripper 破解用户登录密码
一.什么是 John the Ripper ? 看到这个标题,想必大家都很好奇,John the Ripper 是个什么东西呢?如果直译其名字的话就是: John 的撕裂者(工具). 相比大家都会觉得 ...
- JavaEE权限管理系统的搭建(四)--------使用拦截器实现登录认证和apache shiro密码加密
RBAC 基于角色的权限访问控制(Role-Based Access Control)在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限.这就极大地简化了权限的管理.在一个 ...
随机推荐
- MySQL中bin-log使用
操作命令:show binlog events ; reset master 删除所有的二进制日志 flush logs 产生一个新的binlog日志文件 show master logs; 或者 s ...
- PDF ITextSharp
示例源码 //Document:(文档)生成pdf必备的一个对象,生成一个Document示例 Document document = new Document(PageSize.A4, 30, 30 ...
- Group 原则
select 后面的所有劣种,没有使用聚合函数的列,必须出现在 group by 后面,比如下面的例子 insert into #temp_move2 ) from #temp_move group ...
- shell复习---文件解压命令
需要自己部署服务端,故在申请了空间之后,需要自己安装linux自己,自己安装Apache等,所以下载的压缩文件需要运行.网上找了一些解压命令不对,特别试了下面的方法有效,特别记录一下: 用ssh 登陆 ...
- Samba出现“您可能没有权限使用网络资源”解决方法
我最近在Centos6.3上搭建Samba系统,按照配置都已经配置好了,当就是没法在win7下访问,老是弹出以下弹出框: 后来我在网上找资料发现有SELinux这么个东西,然后我就按照配置该了一下就成 ...
- 1064: [Noi2008]假面舞会 - BZOJ
Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具.每个面具都有一个编号,主办 ...
- 解决eclipse复制粘贴js代码卡死的问题
鸣谢:http://blog.csdn.net/zhangzikui/article/details/24805935 ---------------------------------------- ...
- 《head first java 》读书笔记
Updated 2014/03/26 P300-P402 Updated 2014/03/25 P213-300 Updated 2014/03/20 P0-P213 对象本身已知的事物被称为: 实例 ...
- 20130729--Samba的学习
(一).基本概念 samba是一个能让你的Unix计算机和其它MS Windows计算机相互共享资源的软件. samba提供有关资源共享的三个功能,包括:smbd,执行它可以使Unix能够共享资源给其 ...
- Pie Charts
Default pie chart The default pie chart with no options set. Source Code $.plot('#placeholder', da ...