代码之家  ›  专栏  ›  技术社区  ›  Moe Sisko

.ASPXROLES成员身份角色cookie过期

  •  0
  • Moe Sisko  · 技术社区  · 15 年前

    使用ASP.NET 2.0,使用表单身份验证。 为了测试,我在web.config中配置了角色cookie,如下所示:

    <roleManager enabled="true" cacheRolesInCookie="true" cookieName=".ASPXROLES" cookieTimeout="2"></roleManager>
    

    我想看看缓存的角色cookie过期时会发生什么。 使用Fiddler,2分钟后,我可以看到角色cookie的原始值已经更改。

    我希望在过期时,ASP.NET只需从数据库中重新读取角色信息,然后用相同的值重新填充cookie。所以我的问题是,为什么曲奇的原值在过期后会改变?cookie值不可读(base 64编码和/或加密?),因此我无法判断其中的信息是否相同,尽管应用程序似乎仍然工作正常。

    编辑:

    看起来每次角色被加密并缓存在cookie中时,都会得到不同的原始值。

    e、 g.如果运行以下代码:

        RolePrincipal rp = (RolePrincipal) User;
        string str = rp.ToEncryptedTicket();
        Label1.Text = str;
    

    你每次都得到不同的值。 所以这种行为看起来很正常。

    1 回复  |  直到 15 年前
        1
  •  1
  •   jcolebrand    15 年前

    aspxroles cookie只适用于对用户的角色查询。除非您使用的角色会导致其功能不同(web.config auth?)那么你就不会看到任何过期的饼干。

    你能分享你的web.config和你用来测试这个的基本页面吗?

    您是否尝试过该特定配置以查看过期后的更改?

    <location path="img/logo.png">
        <system.web>
            <authorization>
                <deny users="?"/>
                <allow roles="CanSeeLogo"/>
            </authorization>
        </system.web>
    </location>
    

    基于问题编辑:

    在我的web.config中 <configuration><system.web> 我有这把钥匙:

    <machineKey decryption="AES" decryptionKey="{64bits random hex}" validation="SHA1" validationKey="{128 bits random hex}"/>
    

    我很好奇,如果你设置“手动”如果你有一个不断变化的加密字符串。此外,默认情况下,这在C:\ Windows\Microsoft.Net\Framework\etc文件夹中设置,但您可以(显然)在web.config中重新定义它,以覆盖每个应用程序。这还允许您在域中共享同一个cookie跨应用程序。

    链接以生成随机十六进制字符串

    https://www.grc.com/passwords.htm

    concat两页的第一个结果刷新第二个结果。稍后删除web.config密钥不会对应用程序产生负面影响(当然不会)

    推荐文章