急。。。global.asax中会话状态不可用(网上搜过,但是貌似不行啊)

yitengxjl 2012-05-17 02:13:11
用户操作每个页面的时候都进行一次是否登录的判断,不想在每个页面里面写判断,于是想在global文件中判断,就是取出用户登录时放到session中的userid进行判断,但是session一直都取不到。。。。
网上说
/// <summary>
/// 获取会话状态 此时Session生效
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Application_AcquireRequestState(object sender, EventArgs e)
{ }
在这个方法之后都能取到session,但是我试了下,貌似真的取不到啊,本人没系统学过asp.net,因为要将一个已经写jsp网站改为asp.net的,时间也比较紧,各位大神帮帮忙啊。。。。
...全文
118 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
licai1210 2012-05-17
  • 打赏
  • 举报
回复
至于会不会,你自己实践下就好了。我记得是会的,也做过
yitengxjl 2012-05-17
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]

图片不会进asp.net的pipeline吧。
[/Quote]
额 我也不清楚哦 不熟
宝_爸 2012-05-17
  • 打赏
  • 举报
回复
图片不会进asp.net的pipeline吧。
yitengxjl 2012-05-17
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]

你的看看请求的url是什么啊,很多时候请求的只是一张图片而已,你说能有session吗?加个判断吧,如果请求的路径中含有.aspx,那session是有的
[/Quote]
额 是的额 多谢提醒啊 。。。
licai1210 2012-05-17
  • 打赏
  • 举报
回复
你的看看请求的url是什么啊,很多时候请求的只是一张图片而已,你说能有session吗?加个判断吧,如果请求的路径中含有.aspx,那session是有的
yitengxjl 2012-05-17
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

用httpMoudle可以实现的,在Application_AcquireRequestState
session在这里应该是能取到的
[/Quote]
网上也好多人都说能取得到呢 为什么我取不到啊。。。
我以前没接触过asp.net的,也不知道httpMoudle怎么用。。。时间紧 来不及学啊。。郁闷
anzhiqiang_touzi 2012-05-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
这些事件被触发的顺序是:
· Application_BeginRequest
· Application_AuthenticateRequest
· Application_AuthorizeRequest
· Application_ResolveRequestCache
· Application_AcquireRequestState
· Application_PreRequ……
[/Quote]
licai1210 2012-05-17
  • 打赏
  • 举报
回复
用httpMoudle可以实现的,在Application_AcquireRequestState
session在这里应该是能取到的
yitengxjl 2012-05-17
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

你可以写一个类

在page里面继承
[/Quote]
那不是每个页面都要继承?有点麻烦吧。。。
ycproc 2012-05-17
  • 打赏
  • 举报
回复
你可以写一个类

在page里面继承
yitengxjl 2012-05-17
  • 打赏
  • 举报
回复
我将Application_AcquireRequestState事件里面改为后台输出,代码如下
protected void Application_AcquireRequestState(object sender, EventArgs e)
{
System.Diagnostics.Debug.WriteLine("执行Application_AcquireRequestState");
if (Context.Session != null)
{
System.Diagnostics.Debug.WriteLine("Application_AcquireRequestState中SessionID" + Session.SessionID);


}

}
然后进行了一次登录
看后台输出:
执行Application_AcquireRequestState
Application_AcquireRequestState中SessionIDtdqn2n55qgvwqv55uw0qqz55
执行Application_AcquireRequestState
执行Application_AcquireRequestState
执行Application_AcquireRequestState
Application_AcquireRequestState中SessionIDtdqn2n55qgvwqv55uw0qqz55
执行Application_AcquireRequestState
执行Application_AcquireRequestState


看来执行了不止一次啊。。。。
第一次取到了,后面的有的取得到,有的取不到啊。。。
为什么啊?
yitengxjl 2012-05-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

我觉得应该用PostAcquireRequestState这个Event.

根据msdn, AcquireRequestState 是Occurs when ASP.NET acquires the current state (for example, session state) that is associated with the current request.
还没有取到状……
[/Quote]
我从Application_AcquireRequestState事件一直试到Application_EndRequest,都不行啊
yitengxjl 2012-05-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

ashx要继承这个“IRequiresSessionState”
[/Quote]
继承了,问题依旧啊。。。
我就是大神 2012-05-17
  • 打赏
  • 举报
回复
2楼正解
宝_爸 2012-05-17
  • 打赏
  • 举报
回复
我觉得应该用PostAcquireRequestState这个Event.

根据msdn, AcquireRequestState 是Occurs when ASP.NET acquires the current state (for example, session state) that is associated with the current request.
还没有取到状态。

而PostAcquireRequestState 是Occurs when the request state (for example, session state) that is associated with the current request has been obtained.
已经取到状态了。
yitengxjl 2012-05-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

这些事件被触发的顺序是:
· Application_BeginRequest
· Application_AuthenticateRequest
· Application_AuthorizeRequest
· Application_ResolveRequestCache
· Application_A……
[/Quote]
这些都看过了,关键是取不到session啊 ,没有session,就不能通过session中的userid判断了啊。。。。
接分为押宝 2012-05-17
  • 打赏
  • 举报
回复
这些事件被触发的顺序是:
· Application_BeginRequest
· Application_AuthenticateRequest
· Application_AuthorizeRequest
· Application_ResolveRequestCache
· Application_AcquireRequestState
· Application_PreRequestHandlerExecute
· Application_PreSendRequestHeaders
· Application_PreSendRequestContent
· <<执行代码>>
· Application_PostRequestHandlerExecute
· Application_ReleaseRequestState
· Application_UpdateRequestCache
· Application_EndRequest

每个页面调用权限判断公共方法,防止没权限,直接在浏览器输入地址,

或者在母版页进行权限判断,顺便就判断了session状态。
cupsBing 2012-05-17
  • 打赏
  • 举报
回复
ashx要继承这个“IRequiresSessionState”
yitengxjl 2012-05-17
  • 打赏
  • 举报
回复
/// <summary>
/// 获取会话状态 此时Session生效
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Application_AcquireRequestState(object sender, EventArgs e)
{
System.Diagnostics.Debug.WriteLine(Session.SessionID);

}
就是在Session.SessionID的地方出错的。。。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧