2014-05-18 262 views
0

preview:在我的web.config中 - 我不使用表單身份驗證。我自己設置了表單cookie。表單身份驗證是否記住身份驗證?

不過 - 有時候,我看到這樣的代碼:

/*1*/ protected void Application_AuthenticateRequest(Object sender, EventArgs e) 
/*2*/ { 
/*3*/  if (HttpContext.Current.User != null) 
/*4*/  { 
/*5*/  if (HttpContext.Current.User.Identity.IsAuthenticated) 
/*6*/   { 
/*7*/    //... 
/*8*/    HttpContext.Current.User = .... 
/*9*/    //... 
/*10*/   } 
/*11*/  } 
/*12*/ } 

望着線#5 -

如何,如果線#8即將設置驗證它曾經被驗證?

我的意思是 - 線#8是誰該具體要求設置身份驗證,並在請求完成後,對將來的請求沒有「記憶」之一。 (cookie過期只是 - 持久cookie的持續時間)。

問題

  • 在什麼情況下會排隊#5回報true
  • 在什麼情況下行#3null

NB,這個問題假設begin_request事件沒有進行任何設置,並在身份驗證設置的唯一舞臺上Application_AuthenticateRequest - 我不使用會員引擎。


佔位符:如果登錄cookie過期

http://msdn.microsoft.com/en-us/library/aa289844(v=vs.71).aspx

enter image description here

回答

1

3號線可以變成零。 如果用戶登錄,則#5行爲true。

看起來好像這兩種方法是相輔相成的,事實上它們的確如此。可以更容易地檢查HttpRequest.IsAuthenticated。欲瞭解更多信息,請瀏覽:

asp.net membership IsApproved false but still allowing login

在這裏:

http://msdn.microsoft.com/en-us/library/system.web.httprequest.isauthenticated%28loband%29.aspx

我沒有回答您的主要問題雖然。抱歉。

除了我下面的評論,你可能會發現這個鏈接有助於解釋添加角色到現有原則的能力。 http://msdn.microsoft.com/en-us/library/vstudio/5k850zwb%28v=vs.100%29.aspx

+0

正如你所說,這不是一個答案。第#8行是**即將設置**認證。所以看起來'N'行'#3'記得從'N-1'階段的身份驗證(ps我不使用成員資格) –

+0

我已經通過你提供的鏈接,我想你已經錯過了例程是在做。第8行不設置認證,畢竟它將現有身份重新應用到它正在生成的新主體。你提供的鏈接甚至可以解釋它。新原則是舊原則的副本,但新原則包含與用戶賬戶相關的角色。這是因爲您無法將角色添加到現有主對象的角色對象。 –

+0

Craig,將Iprincipal對象設置爲'context.User'的行爲_IS_是什麼導致IsAuthenticate獲得true/false。所以它確實設置了認證。不過,我想我知道我的問題是什麼。我不在整個站點使用表單身份驗證。我將它設置爲常規和每個請求 - 我將Context.User設置爲值。但(!)與表單認證,它會自動執行。因此_if_條件。 –