2009-11-30 149 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