.ASPXROLES会员角色cookie到期

时间:2010-11-15 23:45:55

标签: asp.net asp.net-membership asp.net-2.0

使用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的原始价值会在到期后发生变化? cookie值不是人类可读的(基本64编码和/或加密?),所以我不知道它中的信息是否相同,尽管应用程序似乎仍然可以正常工作。

编辑:

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

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

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

每次都会得到不同的值。 所以行为似乎很正常。

1 个答案:

答案 0 :(得分:1)

aspxroles cookie仅适用于用户的角色查询。除非您正在使用会导致其功能不同的角色(web.config auth?),否则您不会通过使cookie过期而看到任何内容。

您可以分享您用来测试此内容的web.config和基本页面吗?

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

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

基于问题编辑:

<configuration><system.web>下的我的web.config中,我有这个键:

<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

连接第二个页面刷新的第一个结果。以后删除web.config键不会对您的应用产生负面影响(当然不会)