使用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;
每次都会得到不同的值。 所以行为似乎很正常。
答案 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键不会对您的应用产生负面影响(当然不会)