我最近将网站从一个主机移动到另一个主机。
在移动之前,表单身份验证正常工作,用户仍然在会话中保持登录状态。
移动用户在看似随机的时间后退出。
我检查了网络流量,并且.aspxauth cookie正在发送到服务器。
我在本地调试了问题,然后再次发送cookie,但它没有出现在Request.Cookies中。谷歌告诉我,这是因为如果ASP.NET无法解密.aspxauth cookie,那么它会偷偷地将它从Request.Cookies集合中删除。
由于
答案 0 :(得分:0)
ASP.NET无法解密自己加密的cookie似乎有点荒谬,但事实确实如此。
要加密cookie,ASP.NET使用web.config或machine.config中的MachineKey设置。不幸的是,这是" AutoGenerate,IsolateApps"的默认设置,在这种情况下,ASP.NET每次应用程序池重新生成时都会生成一个新值,因此无法在现有cookie中读取。
解决这个问题的方法是在web.config或machine.config中指定一个键,有一些在线工具可以生成一个(例如http://www.developerfusion.com/tools/generatemachinekey/)和一些离线工具用于更偏执({} {3}})
完成后应该看起来像这样:
<machineKey
validationKey="12365A372...etc...34897"
decryptionKey="A76568...etc...1239847FD"
validation="SHA1" decryption="AES">