怎样在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