首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

怎样在HttpModule捕获到session?该如何处理

2012-02-02 
怎样在HttpModule捕获到session?HttpModule如下:publicvoidInit(HttpApplicationcontext){context.Acquire

怎样在HttpModule捕获到session?
HttpModule如下:

 
public   void   Init(HttpApplication   context)
                {
                        context.AcquireRequestState   +=   new   EventHandler(context_AcquireRequestState);
                }

                void   context_AcquireRequestState(object   sender,   EventArgs   e)
                {
                        HttpApplication   application   =   (HttpApplication)sender;
                        string   url   =   application.Request.Url.ToString();

                        string   userName   =   Convert.ToString(application.Session[ "UserName "]);

......


application.Session[ "UserName "]出错:会话状态在此上下文中不可用

请问怎样在HttpModule中获得Session?   请帮忙,多谢了。。

[解决办法]
帮顶
[解决办法]
来学习
[解决办法]
application.Session[ "UserName "]

TO

application.Context.Sesseion[ "UserName "]
呢.1.1 2.0?

[解决办法]
不关HttpModule的事,而是事件引发顺序的问题,在AcquireRequestState事件引发时,Session对象还没有被创建,所以会有你的问题,看看这篇文章及其解决方案:

http://www.dotnetjunkies.com/Article/543AE98B-FD00-4064-B128-AB76E7BC34B3.dcik
[解决办法]
楼主怎么不出来说一下
[解决办法]
支持一下~
[解决办法]
session生存期的问题了,你可以注意到在debug模式下session对象是null,因为在init时没有生成session对象.
[解决办法]
必须继承自IRequiresSessionState这个标记接口。

任何需要读写Session的类都如此,无论你是IHttpModule还是IHttpHandler甚至是别的自定义类。
[解决办法]
参考,请到MSDN查一下IRequiresSessionState的说明。

public class _Common_ClickCount : IHttpHandler, IRequiresSessionState
{
string _message = "//更新成功。 ";

public void ProcessRequest(HttpContext context)
{
string checkString = context.Request.QueryString[ "cs "];
if ((context.Session[ "CheckString "] != null) && (checkString == context.Session[ "CheckString "].ToString()))
{
this.ClickCountAddOne(Convert.ToInt32(context.Request.QueryString[ "id "]), context.Request.QueryString[ "table "], ref _message);
context.Session[ "CheckString "] = string.Empty;
}
else
{
_message = "//请求错误。 ";
}
context.Response.ContentType = "text/plain ";
context.Response.Write(_message);
}

public bool IsReusable


{
get
{
return true;
}
}
}
[解决办法]
帮顶

热点排行