从在本地主机上而不是在服务器上播放的那一刻起,在我看来,您的会话存在一些问题,并且会话 ID 在您的服务器上快速更改/过期,比身份验证过期更快。
因此,从用户看到页面到发布页面,会话已过期或在身份验证更改之前发生更改,因此会话 ID 不同,因此您会收到此错误。
其他认为你可以看的是你已经设置了machineKey
在 web.config 上。
Update
将您的代码与您编写的斯科特代码进行比较。 Scott 使用用户名,根本不会改变,而你使用 sessionid,正如我所说,它可以改变。
对我来说,以太使用斯科特建议的内容,用户名,以太一些其他也不会改变的值,例如用户的cookie,那不是那么容易改变的。
所以来自斯科特http://www.hanselman.com/blog/ViewStateUserKeyMakesViewStateMoreTamperpressive.aspx
void Page_Init (Object sender, EventArgs e)
{
if (User.Identity.IsAuthenticated)
ViewStateUserKey = User.Identity.Name;
}
这就是斯科特检查用户是否经过身份验证的原因,因为它获取了他的名字。如果您使用sessionid或用户的cookie,则不需要检查是否经过身份验证。
现在,如果您使用 cookie 在 viewstateuserkey 上设置它们,那么对于所有不允许 cookie 的用户,并尝试发布任何帖子都会出错。所以想一个像这样的解决方案来处理它们
https://stackoverflow.com/a/2551810/159270