public void Init(HttpApplication context) { if (context.Context.Response.Cookies.Count>0) { string aaa = "asd"; } // 下面是如何处理 LogRequest 事件并为其 // 提供自定义日志记录实现的示例 //context.LogRequest += new ventHandler(OnLogRequest); context.BeginRequest += new ventHandler(this.BeginRequest); context.EndRequest += new EventHandler(this.EndRequest); } private void BeginRequest(object sender, EventArgs e) { HttpApplication application = sender as HttpApplication; var cc = application.Context.Response.Cookies.Count; //cc=0 } private void EndRequest(object sender, EventArgs args) { HttpApplication application = sender as HttpApplication; var cc = application.Context.Response.Cookies.Count; //cc=0 }
无论如何,session总是为null cookie数量总是0。 登录正常,session在controller中也看得到。
调试流程是这样的,Login form提交后 (此时保存了session,然后调试至HttpModel类(得不到session,并且session是会生成cookie的,也看不到),Controller中看得到有session
在HttpModule的执行过程中,系统是不会生成Session对象的。
Session对象是每次请求时系统动态生成的(虽然是通过HttpContext可以获取),但在HttpModule的接口层次里,还不具备这个对象。
如果你使用HttpHandler,这个时候就可以使用Session了,不过,如果是自己写的实现IHttpHandler类,要实现接口IRequireSessionState接口。
至于Cookie,你可以通过Request来获得。
管道问题.要在会话初始化的事件之后的事件里,才能得到会话数据
请问能详细解答一下可否? 不太懂,google了也没找到
@coder_wang: asp.net管道,你看下一个请求在asp.net里是怎么处理的.
endrequest里是可以拿到session的,beginrequest拿不到
cookie这几个事件都能拿到.因为cookie在很早的时候就解析了.
@吴瑞祥: 我试了 endrequest 拿不到session和cookie 不知道问题出在哪
这个涉及到管道的执行过程,不是每个过程都能拿到cookie的。
还有你的参数能那样转换么?
请问能详细解答一下吗? 我的参数这样转换有错误吗
@coder_wang: 参数那个没什么问题,我想多了。还有,你是拿请求参数,应该去用Request这个对象,而不是Response哈。
@幻天芒: 我是要拿到cookies,设置cookies's domain,所以在Response中拿Cookies