【问题标题】:Caching Roles In Cookie not working - ASP.NETCookie 中的缓存角色不起作用 - ASP.NET
【发布时间】:2012-03-02 06:44:34
【问题描述】:

我在 web.confi 中的 roleManager 看起来像这样。

<roleManager enabled="true" 

    cacheRolesInCookie="true" 
    cookieName=".ASPR0LE3S" 
    cookieTimeout="115" 
    cookieSlidingExpiration="true" 
    cookieProtection="All" 
    createPersistentCookie="false" 
    defaultProvider="CustomizedRoleProvider">               

    <providers>                 
    <add name="CustomizedRoleProvider" 
    type="System.Web.Security.SqlRoleProvider" 
    connectionStringName="MyConn" 
    applicationName="/MyApp"/>              
    </providers>

</roleManager>

我想做的是将我的角色存储在 Cookie 中。该代码应该存储它,但是当我在 FireFox 中查看 cookie 时,没有名为 ASPR 的此类 cookie ......可能是什么问题?我是不是错过了什么。

【问题讨论】:

  • 要查看它们,您必须先登录。你登录了吗?
  • 我已登录,但看不到它。但即使我没有登录,我仍然应该能够看到它。我的猜测是,它永远不会被创建。难道是因为我的角色太多,超出了大小限制?我不应该是因为它
  • 是的,如果你为用户使用过多的角色可以避免,因为cookie有限制,浏览器无法保存,甚至崩溃。此外,您延迟了太多页面并且也不安全。

标签: asp.net cookies roles


【解决方案1】:

来自docs

当 Web.config 文件中的 CacheRolesInCookie 属性设置为 true 时,每个用户的角色信息都存储在 cookie 中。当角色管理检查用户是否属于特定角色时,会在调用角色提供程序以检查数据源中的角色列表之前检查角色 cookie。 cookie 会动态更新以缓存最近验证的角色名称。

在您第一次尝试检查角色之前,角色不会存储在 cookie 中。您似乎只是登录并检查 cookie,而没有执行任何会导致角色提供者在数据源中查找用户角色的操作。

【讨论】:

  • cookie until the first time you attempt to check a role 这到底是什么意思?不是和登陆一样吗?顺便说一句,我后来确实看到了 cookie,但我的应用程序很慢,这意味着它很可能根本不检查 cookie。
【解决方案2】:

如果您使用的是 .NET 4.5,它将无法工作,必须自己保存。见示例代码here

【讨论】:

    【解决方案3】:

    首先,在 cookie 上缓存角色并不那么安全,因为有人可能会窃取/操纵该信息并使用它们来更改角色。这是一个关于此的问题:

    Can some hacker steal the cookie from a user and login with that name on a web site?

    其次,当您将信息存储在 Cookie 上时,这些信息会在每次调用您的站点时来回传输,并增加额外的开销。

    如果您的角色太多,浏览器可能无法保存它们,或者其他 cookie 可能无法保存。在某些情况下,我看到浏览器出现奇怪的行为,例如崩溃或白页,因为这个 cookie 达到限制认为

    尝试设置尽可能少的 cookie 信息。

    更多关于 cookie 限制的信息:
    http://www.nczonline.net/blog/2008/05/17/browser-cookie-restrictions/
    What are the current cookie limits in modern browsers?

    cookie 上的角色将能够在使用登录后查看它们的加密状态。

    【讨论】:

    • 我不知道 ASP.NET 角色提供程序在将角色存储在单独的 cookie 中时是如何工作的,但是不将此类信息存储在 cookie 中的古老建议过于笼统。有很多方法可以保护 cookie 免受中间人和劫持技术的影响,只要采取适当的安全预防措施,这不一定是一个坏主意。
    • @Chris 好的,我接受你的论点——这里的问题是,如果你进行了良好的安全加密,你会得到太大的 cookie——也许浏览器会拒绝它和巨大的开销。所以如果你得到了一个,你就会失去另一个。
    • 至少目前我的应用程序是本地的(在我们的网络上),因此安全性不是问题+开销。我有大约 10 个角色。
    • @Thecrocodilehunter 你并没有从这个缓存中获得太多,只是多了一次数据库查找。
    • @Aristos 我认为这真的会加速我的电脑,因为如果找不到,它会首先在 Cookies 中查找角色,然后它会进行数据库访问,从而大大减少了时间。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    • 2023-04-07
    • 2010-12-27
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多