- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
所以,这个问题很简单,尽管我开始怀疑这是否会得到回答...
我有一个网站,我想在其中使用推荐的 ViewStateUserKey 来保护我的 View 状态。
在我的基本页面(显然是从 Page 继承的)中,我有以下代码:
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
if (User.Identity.IsAuthenticated)
base.ViewStateUserKey = Session.SessionID;
}
在本地主机上运行良好,但是,当我将其上传到主机(由我们的本地提供商之一提供的共享主机)时,它会在我进行身份验证后给出传统的“Viewstate MAC 验证失败”错误。如果我注释掉这段代码,它会完美运行,所以我 1000% 确定这就是原因。
在共享主机上执行 View 状态安全的最佳方法是什么?我也已经设置了 ViewStateMac="Enabled"。是否足够或推荐的解决方法是什么?
最佳答案
从在本地主机上播放而不是在服务器上播放的那一刻起,在我看来你的 session 有一些问题,并且 sessionID 在你的服务器上变化/过期很快,比身份验证过期更快。
因此,从用户看到页面到发布页面, session 已过期或在身份验证更改之前发生更改,因此 session ID 不同,因此您会收到此错误。
其他人认为你可以看是你在 web.config 上设置了 machineKey
。
将您的代码与您制作的不同的 Scott 进行比较。 Scott 使用用户名,这根本不会改变,而您使用 sessionid,它可以像我说的那样改变。
对我来说,ether 使用 Scott 建议的用户名,ether 一些其他不变的值,例如用户的 cookie,这不是那么容易改变的。
来自 Scott http://www.hanselman.com/blog/ViewStateUserKeyMakesViewStateMoreTamperresistant.aspx
void Page_Init (Object sender, EventArgs e)
{
if (User.Identity.IsAuthenticated)
ViewStateUserKey = User.Identity.Name;
}
这就是 scott 检查用户是否已通过身份验证的原因,因为它获取了他的名字。如果您使用 sessionid 或用户的 cookie,则无需检查是否已通过身份验证。
现在,如果您使用 cookie 将它们设置在 viewstateuserkey 上,那么对于所有不允许 cookie 的用户,并尝试发布任何帖子都会出错。所以想想这样的解决方案来处理它们
关于c# - ViewStateUserKey + 共享主机 + ViewStateMac 验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10862258/
所以,这个问题很简单,尽管我开始怀疑这是否会得到回答... 我有一个网站,我想在其中使用推荐的 ViewStateUserKey 来保护我的 View 状态。 在我的基本页面(显然是从 Page 继承
我是一名优秀的程序员,十分优秀!