session判断有效性讨论

本文探讨了在C#.NET中如何正确判断Session是否存在,特别是在首次访问时避免异常的方法。文章介绍了在Global.asax文件的Application_BeginRequest事件中进行Session判断的技巧,并提供了在HttpHandler中使用Session的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C#.NET判断某个Session存在与否,通常用的方法是Session["NO"]==null来判断
但这个句子不是所有时刻都是对的.这样还是会偶尔出错的。
如果该请求还没有实例化一个HttpSessionState,也就是第一次访问时执行该代码最有可能,你可以试试在Global中Application_BeginRequest事件中执行该代码。
private void Appliction_BeginRequest(object sender, EventArgument e)
{
if(HttpApplication.HttpContext.Current.Session["No"]!=null)
{
//这里放执行程序
}
}
编译后第一次访问将会发生异常,HttpSessionState抛出这个常见的异常:没有该对象的实例
当然在页面程序上是不会出现这种问题的。:)
不过如果要在Global中或者HttpModule,HttpHandler中执行这些代码的话就要考虑了。

解决方法:
1、先引用System.Web.SessionState 这个命名空间,
2、如果是要在HttpHandler 中读取Session的内容,就要在实现IHttpHandler 的类中同时实现IReadOnlySessionState 这个接口。
3、如果是要在HttpHandler 中读写Session的内容,就要在实现IHttpHandler 的类中同时实现IRequiresSessionState
具体代码:
ContractedBlock.gifExpandedBlockStart.gif
 1None.gif//在vs2005里通过:http://wzyexf.cnblog.com
 2None.gifpublic class mytest : System.Web.IHttpHandler, System.Web.SessionState.IRequiresSessionState   
 3ExpandedBlockStart.gifContractedBlock.gif    dot.gif{
 4InBlock.gif        public mytest()
 5ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 6ExpandedSubBlockEnd.gif    }

 7InBlock.gif        public void ProcessRequest(HttpContext context) 
 8ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 9InBlock.gif            if (context.Session["temp"== null)
10InBlock.gif                context.Response.Write("Hello 你无权登录");
11InBlock.gif            else
12InBlock.gif                context.Response.Write("Hello html World!");
13ExpandedSubBlockEnd.gif        }

14InBlock.gif
15InBlock.gif        public bool IsReusable 
16ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
17InBlock.gif            get 
18ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
19InBlock.gif                return true;
20ExpandedSubBlockEnd.gif            }

21InBlock.gif
22ExpandedSubBlockEnd.gif        }

23ExpandedBlockEnd.gif    }

转载于:https://www.cnblogs.com/wzyexf/archive/2007/04/07/703582.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值