Asp.net中的一个判断session是否合法的做法

1 if (Session["UserID"] == "" || Session["UserID"] == null)

2 {

3     Response.Redirect("../Login.aspx?m=登录已超时,请重新登陆!");

4 }

一直我都觉得这个方法很不好,非常不好,但是一直也没找到好的方法,刚才突然就想到和匿名方法,结合??运算符,如果session为空,那么就不合法的了, 可以用来判断用户是否登录。

由于Session["UserID"]返回的是Object类型,如果是空的话,就会报空指针异常,以上面的形式来看,而且,这种判断登录状态的行为,在一些项目中是几乎每个页面都需要用到,所以可以提取出一个方法,与其他公有的静态方法一起放到一个类里面,写成如下形式:

1 /// <summary>

2 /// 判断是否登录成功,如果成功则返回session存的字符串,否则为空字符串

3 /// </summary>

4 public static Func<Object, string> isLogin = session => session as string ?? string.Empty;

Session里面可以存的Object,所以,可以是个字符串,可以是个数字,也可以是一个类或者一个集合。我上面这段代码假定存储的是一个字符串,调用的时候,就像是调用方法一样那个调用这个匿名的方法:

1 if (string.IsNullOrEmpty(isLogin(Session["UserID"])))

2 {

3     Response.Redirect("../Login.aspx?m=登录已超时,请重新登陆!");

4 }

您可以会说为何不直接使用string.IsNullOrEmpty来直接判断Session?那么我告诉你,这就如果Session中没有你进行判断的这个key会直接报空指针异常的。

如果是一个类呢?也很明显,session存储的比如说是一个User类,那么上面对代码就改成这样的形式:

1 public static Func<Object, User> isLogin = session => session as User ?? new User() { UserID = -1};

因为返回的类型是User,所以可以使用一个User类来进行接收返回的值,这样,在后面的操作中可以直接使用了。

1 User _user = isLogin(Session["UserID"]);

2 if (_user.UserID == -1)

3 {

4     //登录失败

5 }

时间: 2024-08-05 22:59:55

Asp.net中的一个判断session是否合法的做法的相关文章

ASP.NET中利用Application和Session统计在线人数、历史访问量

先来简单说一下ASP.NET中的Application和Session 下图是我们非常熟悉的Web应用程序的结构: 在这张图中,Web服务器中运行的Web应用程序就是我们所说的Application,每个客户端与Web服务器之间建立的连接就可以看做是一个Session.比如现在服务器端运行的是一个论坛系统,那么现在这个正运行在服务器端的论坛系统的软件就可以看做Application,而每个在线的用户与之建立的连接就相当于一个Session. 那么很容易就会理解,Application是共享的,相

ASP.NET中设置一个定时器来定时更新 转

asp.net 定时器 比较少用,  中国红木网这是一个相当实用的功能,有了RSS博客镜像,就不需要在多处同时发布博客日志了.比如你同时在新浪上有自己的博客,又同时有自己的个人博客站点,那么你只需要在新浪上发布博客日志,而个人博客站点通过RSS博客镜像功能将新浪博客上发布的新日志自动更新到站点中.我们在ASP.NET的,至于asp,由于其天生的局限性,可能无法直接在Web应用程序中完成这一功能,而需要额外的Windows应用程序的支持.1. 管理RSS博客镜像首先我们需要在RSS博客镜像,需要管

温故而知新:Asp.Net中如何正确使用Session

原文链接作者:菩提树下的杨过出处:http://yjmyzz.cnblogs.com Asp.Net中的Session要比Asp中的Session灵活和强大很多,同时也复杂很多:看到有一些Asp.Net开发人员报怨说Session不稳定,莫名其妙的丢失,其实这正是Asp.Net改进的地方之一. 我们知道Session与Cookie最大的区别在于:Cookie信息全部存放于客户端,Session则只是将一个ID存放在客户端做为与服务端验证的标记,而真正的数据都是放在服务端的内存之中的. 在传统we

ASP.Net中无刷新执行Session身份验证

在写一个客户的B/S结构应用程序时,突然发现一个技巧,不知道是否是MS的一个BUG,给相关的有研究的朋友原先考虑写一个检查Session的类,Session失效后,必须转向登陆页面,可每一个调用该类的页面,在不同的WEB路径下,所以转到登陆页面的URL都不同,每个页面都要调用和设置登陆页面路径,所以实际应用就放弃了这一想法后来考虑到不如写一个检查Session失效的页面,由客户端每一秒都刷新一下,就可以在一个页面中调用,但通过FRAME嵌入该ASPX老时有请求发出,不太好看,虽然该页面是隐藏的.

ASP.NET中自定义类使用Session保存信息

Session是Page类的内置对象,可以直接使用Session,但是普通的类,比如一般处理类就无法直接使用.之前我在Handler类中使用类似System.Web.HttpContext.Current.Session["userid"];但是调试显示System.Web.HttpContext.Current.Session一直为null. 解决办法:让自定义的类实现IRequiresSessionState接口,同时加入:using System.Web.SessionState

Ruby中写一个判断成绩分类的脚本

需求为:从键盘输入分数,以此来判断,0-59为不及格,打印"您没有及格,请下次努力!",60-79为及格,打印"您的成绩及格,请更加努力!",80-100为成绩良,打印"您的成绩为优秀,请再接再厉!",如果输入为0-100以外的分数,请打印"您的成绩为优秀,请再接再厉!" 如果采用ruby方式,代码比较精简,如下所示: #!/usr/bin/ruby print "请输入您的分数: " grade = ge

ASP.Net中的四种状态保持机制

本文档转载自http://blog.csdn.net/popping_dancer/article/details/7765464 因时间紧迫,未做个人笔记,仅参考. 这几天在学ASP.Net (就是传说中最难的东西)  上课刚听的时候的确有点听不懂 毕竟第一次接触每天晚上回来看视频的时候 才慢慢的恍然大悟 哦~~ 原来是这么回事呀 想必大牛们当初也是这样的感觉吧 哈哈 !今天来说说ASP.Net中的4种状态保持机制 状态保持机制?神马意思?别急 且听我下面慢慢道来 每个人上网可多有过这样的情况

Qt中使用inherits判断drag and drop事件发起源

有时候我们需要在dragMoveEvent, dropEvent这样的函数中进行一些判断, 过滤不合法的drag或者是区分不同类型的drag做不同的处理, 比如.代码大致如下: void Scene::dragMoveEvent(QGraphicsSceneDragDropEvent *event) { if(event->source()********) { event->accept(); event->setDropAction(Qt::CopyAction); } else {

Asp.Net中使用水晶报表

Asp.Net中使用水晶报表(上) 在我们对VS.Net中的水晶报表(Crystal Reports)进行研究之前,我和我朋友对如何将这个复杂的东东加入我们的Web应用有着非常的好奇心.一周以后,在阅读了大量的“HOWTO”文档之后,我们成功地将一些简单的报告加入到了我们的Asp.net程序中,并得到了一些小决窍. 这篇文章教你如何在.Net Web应用中使用水晶报表,也可以让你在学习过程中少走一些弯路.为了得到最好的效果,读者最好需要有一些基础的Asp.Net访问数据库的知识以及使用VS.Ne