kac*_*apy 6 c# asp.net session
我有一个带有大量页面的Web应用程序,其中大多数需要一些会话变量才能运行.
我想在我的应用程序中添加一些防御性代码.在哪里是最好的地方,如:
if (Session.Count == 0){
Response.Redirect("~/default.aspx");
}
Run Code Online (Sandbox Code Playgroud)
编辑:我如何检查当前页面是否defult.aspx?
Waq*_*aja 16
很难,是的,幸运的是它已经解决了.
您需要在Global.asax中实现Application_PreRequestHandlerExecute
这是代码
/// <summary>
/// The event occurs just after Initialization of Session, and before Page_Init event
/// </summary>
protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e)
{
// here it checks if session is reuired, as
// .aspx requires session, and session should be available there
// .jpg, or .css doesn't require session so session will be null
// as .jpg, or .css are also http request in any case
// even if you implemented URL Rewritter, or custom IHttp Module
if (Context.Handler is IRequiresSessionState
|| Context.Handler is IReadOnlySessionState)
{
// here is your actual code
// check if session is new one
// or any of your logic
if (Session.IsNewSession
|| Session.Count < 1)
{
// for instance your login page is default.aspx
// it should not be redirected if,
// if the request is for login page (i.e. default.aspx)
if (!Context.Request.Url.AbsoluteUri.ToLower().Contains("/default.aspx"))
{
// redirect to your login page
Context.Response.Redirect("~/default.aspx");
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑1:解释和结论
正如其中一个人讲述了ASP.NET应用程序生命周期.
发生了很多事件.
实际上,Global.asax中的事件按以下顺序提升
执行URL映射//看起来只是内部机制
提升BeginRequest事件.
结论:AcquireRequestState事件之前的所有事件都没有Session对象,因为Session没有被ASP.Net加载,所以来自*"AcquireRequestState**事件的任何事件都给出了Session对象因此解决了这个问题.但是我需要进行一些检查在上面的代码中提到
| 归档时间: |
|
| 查看次数: |
13327 次 |
| 最近记录: |