ASP.NET中cookie与Fiter实现简单登陆,AllowAnonymous匿名登陆

向服务器发送cookie

在登陆的时候,我们可以可以通过下列代码,向服务器发送cookie,其中包括自己的账号信息(不涉及加密),用以后面判断访问者.

1 HttpCookie cookie = new HttpCookie("userinfo");//新建一个名为userinfo的cookie
2 cookie.Values["UserName"] = username;//向cookie中加入账号信息
3 cookie.Values["PassWord"] = userpassword;//向cookie中加入密码信息
4 cookie.Expires = DateTime.MaxValue;//设置cookie的可存在的时间,这里设的最长时间,cookie.Expires = System.DateTime.Now.AddDays(1);//设置存在时间1天
5 Response.Cookies.Add(cookie);//写入cookie

过滤器Filter

并不是只有登录时我们才需要请求响应cookie,其实我们在访问任何一个页面的时候,都需要验证cookie信息,判断当前访问该页面的访问者,那么理论上,每一个控制器,每一个action,我们都需要写入关于cookie的代码,如此庞大的工作量,显然是不可能的.通过过滤器filter,这个问题引刃而解.

首先我们自定义一个过滤器

 1       public class CheckLogin : ActionFilterAttribute
 2       {
 3           public override void OnActionExecuted(ActionExecutedContext filterContext)
 4          {
 5              HttpCookie cookie = HttpContext.Current.Request.Cookies.Get("userinfo");//获取当前请求的所有cookie中名为userinfo的cookie
 6
 7             if (cookie==null||cookie.Values["UserName"] == null || cookie.Values["PassWord"] == null)//判断账号密码信息
 8             {
 9                  filterContext.Result = new RedirectResult("/Account/Login");//若帐号密码为null或者cookie不存在,即返回登录页面
10              }
11         }
12      }
13  }

这个过滤器放在控制器或者action上面都可以实现验证cookie的作用,可是需要作用的控制器和action数量太多,我们就需要将该过滤器作用到全局,对所有的控制器作用.

 1     public class FilterConfig
 2     {
 3         public static void RegisterGlobalFilters(GlobalFilterCollection filters)
 4         {
 5
 6             filters.Add(new HandleErrorAttribute());
 7             filters.Add(new CheckLogin.CheckLogin());
 8         }
 9     }
10 }
1     public class MvcApplication : System.Web.HttpApplication
2     {
3         protected void Application_Start()
4         {
5             FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
6         }
7     }
8 }

 匿名访问

按照上述代码进行登陆操作,你会发现,根本找不到登录页面,原因在于,上述全局作用的过滤器,连登录页面都没有放过,就是说,你连进入登陆页面都还需要验证信息,没有信息你就返回登录页,可是登陆页你也无法访问.最后就报错.

所以对于某些特定的页面,我们需要能够匿名访问,这也是一个很实际问题,很多网页我们不需要登陆可以很轻松的访问.

对于匿名访问我们需要用到: [AllowAnonymous],能够跳过验证,实现匿名访问.

 1    public class CheckLogin : ActionFilterAttribute
 2     {
 3         public override void OnActionExecuted(ActionExecutedContext filterContext)
 4         {
 5             var actionFilters = filterContext.ActionDescriptor.GetCustomAttributes(false);//获取所有的描述符
 6
 7             foreach (var item in actionFilters)
 8             {
 9                 if (item.GetType().Name == "AllowAnonymousAttribute")//如果描述符类型中有AllowAnonymousAttribute(AllowAnonymous类型的名字),就直接访问,不需要验证
10                 {
11                     return;
12                 }
13             }
14             HttpCookie cookie = HttpContext.Current.Request.Cookies.Get("userinfo");//获取当前请求的所有cookie中名为userinfo的cookie
15
16             if (cookie==null||cookie.Values["UserName"] == null || cookie.Values["PassWord"] == null)//判断账号密码信息
17             {
18                 filterContext.Result = new RedirectResult("/Account/Login");//若帐号密码为null或者cookie不存在,即返回登录页面
19             }
20         }
21     }

这样,我们就可以实现匿名登录,不需要验证cookie,就可以登陆一些页面.

最后,对于需要验证当前访问者的信息,那么根据取到的cookie中的账号信息,很容易就可以在数据库中找到,这里就不予说明.另外,注销账号,也可以通过过期cookie实现.

ps:才接触计算机程序,也是第一次写博客.感觉写博客是很有必要的,这是一个思考学习的过程,解决问题并不是结束,能够把它写下来,讲解给别人去解决问题,才是一个完美的结束!不过很遗憾,这次我没有做到!功力有限,积极极受大家的指正批评!

参考内容:

http://blog.csdn.net/jin3226390/article/details/3245519(cookie的操作详解)

http://www.cnblogs.com/kissdodog/archive/2013/01/21/2869298.html(MVC自定义过滤器)

  

时间: 2024-10-07 08:29:04

ASP.NET中cookie与Fiter实现简单登陆,AllowAnonymous匿名登陆的相关文章

asp.net中Cookie的用法【转】

比如建立一个名为aspcn,值为灌水小鱼的cookieHttpCookie cookie = new HttpCookie["aspcn"];cookie.Value = "灌水小鱼";Response.AppendCookie(cookie);取出Cookie值也很简单HttpCookie cookie = Request.Cookies["aspcn"];cookieValue = cookie.Value;在一个Cookie中储存多个信息,

ASP.NET中Cookie跨域的问题及解决代码

ASP.NET中Cookie跨域的问题及解决代码 http://www.liyumei.net.cn/post/share18.html Cookies揭秘  http://www.cnblogs.com/zhangziqiu/archive/2009/08/06/cookies-javascript-aspnet.html 最近在项目开发中遇到一个很棘手的问题,一个用户在顶级域名登录后,跳转到自己所拥有的二级域名下管理二级网站时,cookie丢失了,一直找解决办法找了整整两天,百度谷歌一大堆,

asp.net中Cookie的用法(转)

比如建立一个名为aspcn,值为灌水小鱼的cookie HttpCookie cookie = new HttpCookie["aspcn"];cookie.Value = "灌水小鱼";Response.AppendCookie(cookie); 取出Cookie值也很简单 HttpCookie cookie = Request.Cookies["aspcn"];cookieValue = cookie.Value; 在一个Cookie中储存多

Asp.Net MVC 5使用Identity之简单的注册和登陆

由于.Net MVC 5登陆和注册方式有很多种,但是Identity方式去实现或许会更简单更容易理解 首先新建一个项目 其次如下选择Empty和MVC的选项 然后打开NuGet包管理器分别安装几个包 EntityFramework Microsoft.AspNet.Identity.Core Microsoft.AspNet.Identity.EntityFramework Microsoft.AspNet.Identity.Owin Modernizr Microsoft.Owin.Host.

ASP.NET中登录功能的简单逻辑设计

 ASP.NET中登录功能的简单逻辑设计                               概述                               逻辑设计                               1.接收参数                               2.判断参数合法性                               3.访问数据库                               4.保存Session     

Asp.net中的HttpModule和HttpHandler的简单用法

在Asp.net中,HttpModule和HttpHandler均可以截取IIS消息进行处理,这使得我们制作人员能够非常方便的进行诸如图片水印添加,图片盗链检查等功能. 下面先就HttpModule的使用方法进行简单说明: using System;using System.Web; namespace MyWebApp{ public class MyHttpModule:IHttpModule { public void Init(HttpApplication application) {

asp程序中的cookie应用

Previous Page Next Page cookie 常用来对用户进行识别. 实例: Welcome cookie 如何创建欢迎 cookie. 什么是 Cookie? cookie 常用来对用户进行识别.cookie 是一种服务器留在用户电脑中的小文件.每当同 一台电脑通过浏览器请求页面时,这台电脑就会发送 cookie.通过 ASP,您能够创建并取 回 cookie 的值. 如何创建 cookie? "Response.Cookies" 命令用于创建 cookie. 注意:

【转】asp.net中的cookie使用介绍

来源:http://www.jb51.net/article/30398.htm 一.cookie导读,理解什么是cookie 1.什么是cookie:cookie是一种能够让网站服务器把少量数据(4kb左右)存储到客户端的硬盘或内存.并且读可以取出来的一种技术. 2.当你浏览某网站时,由web服务器放置于你硬盘上的一个非常小的文本文件,它可以记录你的用户id.浏览过的网页或者停留的时间等网站想要你保存的信息.当你再次通过浏览器访问该网站时,浏览器会自动将属于该网站的cookie发送到服务器去,

asp.net中的cookie

一.cookie导读,理解什么是cookie 1.什么是cookie:cookie是一种能够让网站服务器把少量数据(4kb左右)存储到客户端的硬盘或内存.并且读可以取出来的一种技术. 2.当你浏览某网站时,由web服务器放置于你硬盘上的一个非常小的文本文件,它可以记录你的用户id.浏览过的网页或者停留的时间等网站想要你保存的信息.当你再次通过浏览器访问该网站时,浏览器会自动将属于该网站的cookie发送到服务器去,服务器通过读取cookie,得知你的相关信息,就可以做出相应的动作.比如,显示欢迎