所以,问题很简单,尽管我开始疑惑这是否会得到回答...
我有一个网站,在这里我想保护我的视图状态与推荐ViewStateUserKey ..
在我的基地页(从页继承明显)我有这样的代码:
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
if (User.Identity.IsAuthenticated)
base.ViewStateUserKey = Session.SessionID;
}
作品在localhost好,但是,当我把它上传到主机(共享我们的本地供应商的一个托管提供),它给传统的“验证视图状态MAC失败”的错误后,我进行身份验证。 如果我出评论这个代码,它完美的作品,所以我1000%肯定这是原因。
什么是对共享主机进行安全视图状态的最佳方法? 我已经设置ViewStateMac =“启用”为好。 是否足够或有什么建议的解决方法?
从玩是本地主机上,而不是在服务器上的那一刻则在我看来,你有对话的一些问题,以及会话ID是服务器上的变化/到期快,比认证过期快。
出于这个原因,从当时的用户看到的页面,到后期它的会话已过期或身份验证变更前变更,所以会话ID是diferent,所以你得到这个错误。
其他的认为,你可以看看是你设置machineKey
在web.config中。
更新
与斯科特比较你的代码中有做出不同的。 斯科特使用的用户名,是不会改变的一切,您使用的SessionID,就像我说的,可以改变。
对我来说,醚使用什么斯科特建议,用户名,乙醚是不是也发生变化,如用户例如cookie的一些其他的价值,即是改变不了的那么容易。
所以从斯科特http://www.hanselman.com/blog/ViewStateUserKeyMakesViewStateMoreTamperresistant.aspx
void Page_Init (Object sender, EventArgs e)
{
if (User.Identity.IsAuthenticated)
ViewStateUserKey = User.Identity.Name;
}
这是斯科特检查,如果用户通过验证,由于得到了他的名字的原因。 如果你用会话ID,或用户的Cookie去,你并不需要检查,如果被验证。
现在,如果你使用cookie来设置他们viewstateuserkey,为所有用户,则一个不允许的cookie,并尽量使任何后会出现错误。 因此,认为这样的一个解决方案来处理他们
https://stackoverflow.com/a/2551810/159270