这里我们采用asp.net mvc 自带的AuthorizeAttribute过滤器验证用户的身份,也可以使用自定义过滤器,步骤都是一样。

第一步:创建asp.net mvc项目, 在项目的App_Start文件夹下面有一个FilterConfig.cs,在这个文件中可以注册全局的过滤器。我们在文件中添加AuthorizeAttribute过滤器如下:

public class FilterConfig

{

public static void RegisterGlobalFilters(GlobalFilterCollection filters)

{

filters.Add(new HandleErrorAttribute());

//将内置的权限过滤器添加到全局过滤中

filters.Add(new System.Web.Mvc.AuthorizeAttribute());

}

}

第二步:在web.config配置文件中修改网站的身份认证为mode="Forms"

提示:配置name值作为最终生成的cookie的名称,loginUrl指定当用户未登入是跳转的页面,这里挑战到登入页面

第三步:添加用户登入相关的控制器和视图

创建LoginController控制器:

public class LoginController : Controller

{

[HttpGet]

[AllowAnonymous]

public ActionResult Index()

{

return View();

}

[HttpPost]

[AllowAnonymous]

public ActionResult Login(User user)

{

if (!user.Username.Trim().Equals("liuxin") || !user.Password.Trim().Equals("abc"))

{

ModelState.AddModelError("", "用户名或密码错误");

return View("index", user);

}

//if (!user.Username.Trim().Equals("liuxin")) {

// ModelState.AddModelError("Username", "用户名错误");

// return View("index", user);

//}

//if (!user.Password.Trim().Equals("abc")) {

// ModelState.AddModelError("Password", "密码错误");

// return View("index", user);

//}

user.Id = Guid.NewGuid().ToString("D");//为了测试手动设置一个用户id

FormsAuthHelp.AddFormsAuthCookie(user.Id, user, 60);//设置ticket票据的名称为用户的id,设置有效时间为60分钟

return Redirect("~");

}

[HttpGet]

public ActionResult Logout() {

FormsAuthHelp.RemoveFormsAuthCookie();

return Redirect("~/Login/Index");

}

}

特别注意:Index和Login这两个方法得使用“[AllowAnonymous]”指明这两个方法可以匿名访问,否则由于过滤器不允许匿名访问,导致登入页面和用户提交都无法进行。显然这不是我们希望看到的。

提示:为了测试方便这边的用户的数据是写死的,用户的id也是临时生成了一个

public class User

{

public string Id { get; set; }

public string Username { get; set; }

public string Password { get; set; }

}

创建登入视图:

@{

Layout = null;

ViewBag.Title = "Index";

}

您尚未登入,请登入

@using(Html.BeginForm("Login", "Login", FormMethod.Post))

{

@Html.Label("Username", "用户名:")@Html.TextBox("Username", null, new { id = "Username", placeholder = "请输入用户名" })

@Html.ValidationMessage("Username")

@Html.Label("Password", "密 码:")@Html.TextBox("Password", null, new { id = "Password", placeholder = "请输入密码" })

@Html.ValidationMessage("Password")

@Html.ValidationSummary(true)

}

提示:当检测到用户未登入,则跳转到web.config中配置的url页面,当用户填写密码并提交时,用户输入的数据会提交到LoginController控制器下的Login方法,验证用户的输入,认证失败重新返回到登入界面,当认证成功,将会执行

<>,这条语句的作用是生成一个ticket票据,并封装到cookie中,asp.net mvc正式通过检测这个cookie认证用户是否登入的,具体代码如下

第四步:将用户信息生成ticket封装到cookie中

public class FormsAuthHelp

{

///

/// 将当前登入用户的信息生成ticket添加到到cookie中(用于登入)

///

/// Forms身份验证票相关联的用户名(一般是当前用户的id,作为ticket的名称使用)

/// 用户信息

/// 有效期

public static void AddFormsAuthCookie(string loginName, object userData, int expireMin)

{

//将当前登入的用户信息序列化

var data = JsonConvert.SerializeObject(userData);

//创建一个FormsAuthenticationTicket,它包含登录名以及额外的用户数据。

var ticket = new FormsAuthenticationTicket(1,

loginName, DateTime.Now, DateTime.Now.AddDays(1), true, data);

//加密Ticket,变成一个加密的字符串。

var cookieValue = FormsAuthentication.Encrypt(ticket);

//根据加密结果创建登录Cookie

//FormsAuthentication.FormsCookieName是配置文件中指定的cookie名称,默认是".ASPXAUTH"

var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, cookieValue)

{

HttpOnly = true,

Secure = FormsAuthentication.RequireSSL,

Domain = FormsAuthentication.CookieDomain,

Path = FormsAuthentication.FormsCookiePath

};

//设置有效时间

if (expireMin > 0)

cookie.Expires = DateTime.Now.AddMinutes(expireMin);

var context = HttpContext.Current;

if (context == null)

throw new InvalidOperationException();

//写登录Cookie

context.Response.Cookies.Remove(cookie.Name);

context.Response.Cookies.Add(cookie);

}

///

/// 删除用户ticket票据

///

public static void RemoveFormsAuthCookie() {

FormsAuthentication.SignOut();

}

}

第五步:测试执行

1. 启动网站输入相应的网址:如下图

2. 此时用户尚未登入将会跳转到登入界面:如下图

3.输入错误的密码会重新跳转到登入界面并提示出错

4. 输入正确的用户名密码

5.点击用户退出会删除掉cookie所以又会跳转到登入界面。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

asp.net 登录验证 mysql_Asp.net mvc验证用户登录之Forms实现详解相关推荐

  1. html用户登录页面设计,简洁时尚的用户登录界面设计效果

    这是一款简洁时尚的用户登录界面设计效果.该用户登录效果使用CSS和JS来完成,它使用元素滑动效果来制作登录表单动画,字体效果时尚大方,是非常不错的用户登录界面UI设计效果. 使用方法 HTML结构 该 ...

  2. html登录验证功能,续:实现用户登录验证功能

    一.提纲 1.Previously前情提要 已经把Thymeleaf部署到项目中: 把前端开发的静态资源成功引入到项目中: 完成登录验证功能,登录成功跳转到success.html页面,登录失败跳转到 ...

  3. Spring MVC定制用户登录注销实现示例

    这篇文章描述了如何实现对Spring MVC Web应用程序的自定义用户访问(登录注销). 作为前提,建议读者阅读这篇文章 ,其中介绍了一些Spring Security概念. 该代码示例可从Spri ...

  4. centos 7 如何验证oracle安装成功_linux下Oracle数据的安装详解

    第二章:CentOS下Oracle用户环境配置和Oracle11g的安装: 1.下载Oracle安装包: linux.x64_11gR2_database_1of2.zip 和 linux.x64_1 ...

  5. 基于Servlet的MVC模式用户登录实例

    关于MVC模式的简单解释 M Model,模型层,例如登录实例中,用于处理登录操作的类: V View,视图层,用于展示以及与用户交互.使用html.js.css.jsp.jQuery等前端技术实现: ...

  6. JVM类加载、验证、准备、解析、初始化、卸载过程详解

    目录 0 使用类的准备工作 初始化(Init) 1 加载(Load) 1.1 详细过程 1.1.1 通过类全限定名获取该类的二进制字节流 1.1.2 静态存储结构=>运行时数据结构 1.1.3 ...

  7. java 登录拦截器_springMVC 拦截器-用户登录拦截实战

    各位小伙伴 咱们继续学习新知识 今天要分享的就是 拦截器 不知道小伙伴们平时上网的时候有没有注意到,尤其是上网购物的时候,不登录账号,就无法访问一些功能页面,比如你不登录账号,就没法查看购物车里面有什 ...

  8. php mysql ajax登录界面_PHP+jQuery+Ajax实现用户登录与退出

    本文使用Ajax无刷新登录和退出,从而提升了用户体验. 若用户为登录状态,则显示用户相关登录信息,否则显示登录表单. 用户登录与退出功能应用在很多地方,而在有些项目中,我们需要使用Ajax方式进行登录 ...

  9. html退出登录_[实战小剧场servletamp;jsp] 用户登录及退出功能实现

    项目使用技术:servlet+jsp+mybatis 用户登录: 根据用户名和密码查询用户信息.查到则登录成功,查不到则登录失败. 用户退出: 销毁session 登录思路: 浏览器在登录页面发起登录 ...

最新文章

  1. 华为为什么要“囤”700名数学家?中科院院士告诉你!
  2. 【星球知识卡片】图像生成都有哪些核心技术,如何对其进行长期深入学习
  3. SAP SD信用控制管理
  4. 【网易中台实践】云信业务中台的敏捷开发
  5. navicat使用查询向表中插入一行记录_SQL--每日一解------Bulk Insert 快速插入
  6. HTML5开发都能干什么?从事哪些岗位?
  7. android log system
  8. 关于DruidStatView监控信息
  9. 第 3 章 查询截取分析
  10. 5.2 2.5-Dimensional Impostors for realistic trees and forests笔记
  11. MVC保存二进制到数据库,并显示文件的方法(图片显示)
  12. YYKit 源码学习使用 1
  13. delphi 发送html邮件,delphi – 以HTML格式发送电子邮件
  14. window终端光标消失
  15. CERT_HAS_EXPIRED
  16. Matlab论文插图绘制模板第60期—瀑布图(Waterfall)
  17. 指标公式c语言源码下载,【通达信】九全指标-指标公式源码
  18. margin:0 auto是什么意思
  19. BI PUBLISHER RTF模板制作PIVOT表和重分组
  20. 安全标准ISO7498-2(Security Architecture)名词定义

热门文章

  1. C++开源矩阵计算工具——Eigen 在VS2005中的下载、配置与使用
  2. vscode中打开pdf文件_提取pdf文件中的文字
  3. c语言生产者与消费者实验报告,生产者和消费者实验报告.doc
  4. Import Changes from Direct3D 11 to Direct3D 12
  5. Keras-11 GAN MNIST
  6. JavaScript 基础(十三):Window对象
  7. Linux彻底删除mysql
  8. 你应该知道的Windows复制技术
  9. Enum,Int,String的互相转换 枚举转换
  10. Redis持久化配置