2009-11-30 202 views
1

在我的web.config我有這樣的:Asp.net Forms身份驗證

<system.web> 
    <authentication mode="Forms"> 
     <forms loginUrl="Login.aspx" protection="All" path="/" timeout="30"/> 
    </authentication> 
    <sessionState timeout="20" /> 
</system.web> 

<location path="admin"> 
    <system.web> 
     <authorization> 
      <deny users="*"/> 
      <allow users="admin"/> 
     </authorization> 
    </system.web> 
</location> 

我有兩個問題:

  1. 在我的管理路徑我想只有管理員用戶訪問,但我找不到辦法做到這一點。我怎樣才能讓只有管理員用戶有權限訪問?

  2. 即使我嘗試使用cookie,用戶總是會註銷,因此他不應該註銷。在我的login.aspx我有folloing代碼,當用戶是有效的:

    FormsAuthentication.RedirectFromLoginPage(user, CheckBoxPersistCookie.Checked); 
    

我怎樣才能使保持登錄用戶?

回答

1

嘗試將<allow>線放在<deny>線上。

<system.web> 
    <authentication mode="Forms"> 
       <forms loginUrl="Login.aspx" protection="All" path="/" timeout="30"/> 
    </authentication> 
    <sessionState timeout="20" /> 
</system.web> 

<location path="admin"> 
    <system.web> 
     <authorization> 
      <allow users="admin"/> 
      <deny users="*"/> 
     </authorization> 
    </system.web> 
</location> 
+0

嗯,這是很容易,但我只是認爲這將是更多的邏輯,你首先否認所有,然後通過添加管理員覆蓋之後? :-) – Martin 2009-11-30 13:48:17

+0

在ASP.NET中,授權規則按優先級排列。 – richeym 2009-11-30 13:49:42

+0

是的,那個人也讓我愚弄了一下。 .NET在看到下一行之前會看到拒絕*並踢人。 – 2009-11-30 14:25:38

0

據我所知,您的身份驗證cookie中有30分鐘超時,會話cookie中有20分鐘。看起來,因爲會話將在20分鐘內過期,因此也不可能使用身份驗證cookie。
如果你想讓用戶登錄,這有點棘手。我知道有可能使用javascript和不可見的iframe來實現它。例如,您需要每5分鐘重新加載一次iframe。您的會話將實時更新並更新本地Cookie。

+0

但是,如果我希望用戶在下次打開網站時登錄?如果他今天登錄,然後關閉而不註銷。然後,如果明天他從同一臺計算機上打開網站,我仍然希望他能夠登錄。這就是爲什麼我嘗試使用Cookie,但是如何實現它? – Martin 2009-11-30 13:50:50

+0

嗯,在這種情況下,你需要實現一些自動登錄代碼。但我想知道它有多安全。 – Danil 2009-11-30 13:59:04

+0

我的意思是cookies不安全。您可以在cookie中保存一些散列值,然後嘗試使用此散列值進行自動登錄,前提是您的客戶端代碼檢測到存在驗證cookie並且用戶沒有進入。 – Danil 2009-11-30 14:02:57

相關問題