2012-03-27 61 views
9

我試圖訪問每個請求(頁面,文檔,PDF等)在我的global.asax中的會話狀態。我知道我不能在Application_BeginRequest中做到這一點,我想我可以在Application_AcquireRequestState中,但它不會工作,這很奇怪,因爲它在另一個項目中工作。有訪問會話狀態的Global.asax事件

所以,我正在尋找一個事件,在這個事件中,我總是可以訪問每個請求的會話狀態。

感謝

編輯:@Mike

我試着這樣做

Sub Application_PreRequestHandlerExecute(ByVal sender As Object, ByVal e As EventArgs) 
    Session("test") = "test" 
End Sub 

但我仍然得到錯誤,我沒有訪問會話狀態。

回答

15

會話在Application_AcquireRequestState期間被加載。你的安全賭注是建立Application_PreRequestHandlerExecute並在那裏訪問它。


更新:並非每個請求都有會話狀態。您還需要檢查空值:if (System.Web.HttpContext.Current.Session != null)

7

最初的Request將不會有Session綁定它。因此,你需要檢查是否Sessionnull

var session = HttpContext.Current.Session; 

if(session != null) { 
    /* ... do stuff ... */ 
} 
+0

它似乎在工作,但如果我能找到更好的東西,這將是很好的。謝謝 – Shadowxvii 2012-03-27 20:49:49

+2

感謝您對初始會議的建議! – Stumblor 2013-08-29 09:30:42

0
If HttpContext.Current IsNot Nothing AndAlso HttpContext.Current.Session IsNot Nothing Then 
strError = HttpContext.Current.Session("trCustomerEmail") 
End If 
0

基於對Mikeinput,這裏是在Global.asax中與我的工作代碼片段:

namespace WebApplication 
{ 
    public class MvcApplication : System.Web.HttpApplication 
    { 
     protected void Application_Start() 
     { 
      /* ... */ 
     } 

     protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e) 
     { 
      if (HttpContext.Current.Session != null && HttpContext.Current.Session["isLogged"] != null && (bool)HttpContext.Current.Session["isLogged"]) 
      { 
       HttpContext.Current.User = (LoginModel)HttpContext.Current.Session["LoginModel"]; 
      } 
     } 
    } 
} 

而且在控制器中:

namespace WebApplication.Controllers 
{ 
    [Authorize] 
    public class AccountController : Controller 
    { 
     /* ... */ 

     [HttpPost] 
     [AllowAnonymous] 
     [ValidateAntiForgeryToken] 
     public async Task<ActionResult> Login(LoginModel model, string returnUrl) 
     { 
      if (!ModelState.IsValid) 
      { 
       return View(model); 
      } 

      // Don't do this in production! 
      if (model.Username == "me") { 
       this.Session["isLogged"] = true; 
       this.Session["LoginModel"] = model; 
      } 
     } 
    } 
}