关于"无法验证数据"的问题

转载 2006年06月09日 20:11:00
首页 本类 焦点难题:关于"无法验证数据"的问题


一个普通的提交网页,如果在很短的时间内提交不会出现问题,但如果在大概30秒后提交的话,就提示"无法验证数据"的问题.搜索了CSDN上以前的帖子,发现一直没有人解决,希望再次提出能有人提供解决的方案.
   测试网址: www.zt6969.com/ttt/RangeValidator2.aspx
   问题触发:在大概30秒后提交即触发此事件.如果打开立即提交的话则一切正常.
    个人分析:1. 此问题与时间有关
             2.可能与ViewState有关.(但就是关闭VeiwState也存在这问题)
             3.另外不知是否与Cookie有关系.
     如果有朋友也遇到相同的问题而没有解决的,欢迎进行讨论,我的QQ:149204016
    这个问题很急,要是真的解决不了,怕是网站都开发不成了.


设断点跟踪,看看是在哪里出的错误,把相关的错误代码贴出来.


自己写一个自定义验证控件吧


[HttpException (0x80004005): Authentication of viewstate failed.  1) If this is a cluster, edit <machineKey> configuration so all servers use the same validationKey and validation algorithm.  AutoGenerate cannot be used in a cluster.  2) Viewstate can only be posted back to the same page.  3) The viewstate for this page might be corrupted.]
   System.Web.UI.LosFormatter.Deserialize(String input) +118
   System.Web.UI.Page.LoadPageStateFromPersistenceMedium() +102
[HttpException (0x80004005): Invalid_Viewstate
Client IP: 210.83.210.238
Port: 33260
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)
ViewState: dDwtMTU2NjIyMzcyNDs7PrsxAAi/+5PmnGQ8AdSVGfQvyzYc
Http-Referer: http://www.zt6969.com/ttt/RangeValidator2.aspx
Path: /ttt/RangeValidator2.aspx.]
   System.Web.UI.Page.LoadPageStateFromPersistenceMedium() +443
   System.Web.UI.Page.LoadPageViewState() +18
   System.Web.UI.Page.ProcessRequestMain() +447
光看这些不够哦,你还是把代码贴出来看看吧。


我也曾经碰到过验证控件失效的问题,后来我解决了!以下是我的分析:你也可以试试!
问题的原因:你本地的机器和服务器上的装的.NET Framework的版本不是一样的!
因为asp.net的验证控件验证都是需要.NET Framework自带的aspnet_client内的.js文件来支持!
.NET Framework版本不一样导致自带的aspnet_client内的文件也有细微的差别,就会导致asp.net的验证控件部分验证失效。比如我的本地机器的.NET Framework 版本: 1.14322.573 。服务器的.NET Framework 版本: 1.14322.2032。
解决办法:首先去下个asp.net探针,可以去http://down.chinaz.com/S/6936.asp下载!看看本地和服务器.NET Framework 版本各是多少!得到服务器.NET Framework 版本以后要找到这个版本aspnet_client文件夹放到空间上!这样你的控件就应该好使了!


不一定能解决但是可以试一下!


比较神奇的问题


沒有遇到過,路過這裏,學習一下.......


代码我敢保证决对没有问题,在本机测试一切正常.
  zipo(Multiple-Inheritance OOP)的方法试过一下,服务器的.NET Framework 版本: 1.14322.2032
,但我找到不这个版本aspnet_client文件,不过我想这个影响的应该是控件不太好使,并不会出现
ViewState截断或破坏.
   测试页代码:
<%@ Page Language="C#" ContentType="text/html" ResponseEncoding="gb2312" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
<script language="C#" runat="server">
void Button1_Click(Object src,EventArgs e)
{
Ran1.Validate();
if(Ran1.IsValid)
message1.Text="验证通过";
else
message1.Text="验证失败";
Ran2.Validate();
if(Ran2.IsValid)
message2.Text="通过";
else
message2.Text="失败";
Ran3.Validate();
if(Ran3.IsValid)
message3.Text="通过";
else
message3.Text="通过";
if(Page.IsValid)
lab.Text="页面执行通过";
else
lab.Text="页面执行失败";
}
</script>
</head>
<body>
<center>RangeValidator控件验证</center>
<br/><br/>
<form runat="server">
整型数据验证(取值范围1-10):
<asp:TextBox id="tex1" MaxLength="20" runat="server" /> <asp:Label id="message1" runat="server" />
<asp:RangeValidator Display="Dynamic" ID="Ran1" 
 ControlToValidate="tex1" Type="Integer" ErrorMessage="失败"
 MaximumValue="10" MinimumValue="1"  runat="server" />
<br/><br/>
字符型数据验证(取值范围a-h):
<asp:TextBox id="tex2" MaxLength="20" runat="server" /> <asp:Label id="message2" runat="server" />
<asp:RangeValidator Display="Dynamic" ID="Ran2" ControlToValidate="tex2" Type="String" 
 ErrorMessage="失败" MaximumValue="h" MiniumValue="a" runat="server" />
<br/><br/>
浮点型数据验证(取值范围1.0-20.0):
<asp:TextBox id="tex3" MaxLength="20" runat="server" /> <asp:Label id="message3" runat="server" />
<asp:RangeValidator Display="Dynamic" ID="Ran3" ControlToValidate="tex3" Type="Double" 
 ErrorMessage="失败" MaximumValue="20.0" MiniumValue="1.0" runat="server" />
<br/><br/>
<asp:Button Text="确认" OnClick="Button1_Click" runat="server" />
<br/><br/><hr><br/>
<asp:label id="lab" runat="server" />
</form>
</body>
</html>


这个问题存在于网站的每一个提交本身的页面上,而与是否自定义控件无关.


自己顶下,想了N久,终于解决问题了.希望对碰到此问题的朋友能有所帮助.
   
   1.解决方法:在Page指令中设置禁止MAC(身份验证代码 ):
<% @ Page EnableViewStateMac="false">
   个人分析:当网页提交给本身时,服务器会通过MAC以检查视图的状态,看状态是否在客户端被更改.但这也就导至一个潜在的问题,即服务器端的状态一般保持时间很短,如果在服务器上状态消亡后再提交页面的话,就会造成MAC验证不通过,产生无法验证的错误提示.
   这个解决方法也存在很多麻烦,比如需要在每个提交给自身的页面加上这条指令.而且存在一些安全隐患,如有人恶意更改视图状态等.
7楼  gyyshuai   (师无横) 二级用户 该版得分小于等于500分,大于100分  回复于 2005-04-06 09:45:05  得分 0

据说这个问题是因为在iis接受页面传过来的数据时,需要对它进行加密,而加密的算法和key值,在machine.config中默认的时候没有设置,因此iis每次自动生成key值,当有多个进程的时候,key值可能不相同,因此不能够解密成功。  
  解决的方法有两种:  
  一种是在machine.config中设置key值  
  一种是在应用程序的web.config中增加processModel节点,设置加密的key值,这样保证只用一个key值加密

相关文章推荐

android 基础的小问题1(Adapter的数据无法刷新)

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...

Hibernate审计日志时业务数据无法同步问题解决

Hibernate审计日志时业务数据无法同步问题解决 1.      问题描述 整个项目采用SpringMVC3.0+Hibernaete3.6作为基础框架,项目刚开始没有加入日志审计功能,业务添加、...
  • cf1999
  • cf1999
  • 2013-09-07 08:24
  • 1148

学生信息管理系统---信息查询窗口无法查询到数据(问题及其解决办法)

前言:          经过学生信息管理系统这个VB项目以后,我想我应该慢慢的将我在这个项目中的问题记录并且将解决方法发出来,所以就有了今天的这篇博客,本次详细说一下VB在和SQL Server 2...

解决mysql无法插入中文数据及插入后显示乱码的问题【亲测图文解说!】【转载】

(1)废话不多说就是使用mysql数据库的时候无法输入中文,可以输入中文后显示的又是乱码!! (2)不说了!开始解决问题! 第一步:找到安装mysql的目录找到 my.ini 文件...

在ssh中 无法读取数据源配置文件 dataSource.properties 的问题

错误 十月 11, 2016 5:32:41 下午 org.apache.catalina.core.ApplicationContext log 信息: Initializing Spring ...

dataTransfer.getData()在dragover,dragenter,dragleave中无法获取数据的问题

做拖拽相关效果时,想在ondragover时给被拖拽元素添加一些样式,于是在dragover事件的函数中通过dataTransfer.getData()获取在dragstart中设置的数据,然而发现d...

ViewPager+Fragment+GridView方案notifyDataSetChanged()无法刷新数据问题

采用ViewPager+Fragment+GridView方案实现类似qq的多屏滑动的效果,但是在运行问题中发现了第三屏的GridView修改数据是无法刷新,采用notifyDataSetChange...

在使用 <s:iterator value="#request.students"></s:iterator> 无法显示数据,而 ${request.students[0].id} 却可以显示时问题

在本人第一次做项目的时候,因为这个问题纠结了很久,使用 如下代码. ${name} 一直无法显示数据,而使用 如下代码却可以显示出来. ${request.students[0].id} ...

Unity中PlayerPrefs.DeleteAll()无法清除数据的问题

我们的游戏中都需要保存自己是游戏数据,其中我们会用到
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)