首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我应该在ViewState中存储数据库ID字段吗?

在ViewState中存储数据库ID字段不是一个好的实践,原因如下:

  1. 安全漏洞:ViewState是一种用于存储用户控件的状态的特殊隐藏字段,当用户从表单提交数据到服务器时,状态被返回到客户端并序列化到隐藏的ViewState字段中。这个过程中,所有未经授权的代码都可以访问和修改这些数据。使用ViewState可能导致诸如跨站脚本(XSS)攻击、跨站请求伪造(CSRF)攻击或者会话劫持等问题。
  2. 数据传输性能:将数据库ID存储在ViewState内会增加服务器的数据传输负担。每次访问页面时,ViewState都会包含所有数据,而不仅仅是对这个ID的操作。这可能导致数据加载延迟,降低页面性能。
  3. 缓存问题:ViewState不适用于缓存。即使页面的某些部分具有相同的数据库ID,每个用户的Session也会产生新的ViewState。这意味着每次请求页面时,都会通过ViewState传输数据库ID,而不是直接从存储中获取数据。
  4. 持久化存储:为了确保数据的安全性和可靠性,最好将数据库ID存储在其他适当的数据存储中。可以选择将ID存储在Cookie、localStorage或者服务器端的Session中。

总之,将数据库ID存储在ViewState中不是一个好的方式,特别是考虑到数据安全和性能方面的问题。更好的方法是将ID存储在适当的持久化存储中,并使用适当的标识符替代ID进行数据的快速查找和访问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

数据库存储日期的字段类型到底应该用varchar还是datetime ?

该字符串未被识别伪有效的DateTime        正在做的新闻发布系统,数据库存储时间的字段类型为datetime类型,并且字段值都是在服务器端自动获取的。...        猜测是本机电脑时间格式的问题,在客户端获取了一下时间news.CreateTime的值,格式为:“2014/8/23 星期六 Danny 13:10:14”,而该条记录的时间在数据库存储的值为...2、将数据库存储时间的数据类型改为varchar(),不过这时最好让这些时间是数据库自动生成的(一个没有格式的输入也可能会导致输出错误),因为存储类型为varchar(),所以获取到的值也就被认为是一个字符串...不过数据库存储时间的类型如果为字符型也会带来一些麻烦:         数据库的时间仅仅是用来显示、查找的,那么影响还不算大,但如果对时间字段进行一些算法如计算星期、DateDiff、DateAdd...等,那就麻烦了,尤其实在大型数据查询中转换类型是会影响效率的 总结         数据库存储日期的字段类型到底应该用varchar还是datetime ?

3.9K30
  • ASP.Net WebForm温故知新学习笔记:二、ViewState与UpdatePanel探秘

    ViewState对应项的值可以存储任何类型的值(参数是Object类型),实施上任何类型的值存储ViewState中都会被装箱为Object类型。   ...["age"] = age; 16 this.lblNumber.Text = age.ToString(); 17 }    这里,我们借助ViewState存储了age的状态值,第一次来给你返回...(2)大隐隐于市的“页面级”隐藏字段   跟Session和Dictionary的存储位置不同,ViewState的作用域是页面,也就是说ViewState存储在浏览器的页面之中的(这里相比Session...例如,在我们使用Repeater的过程,WebForm会自动将DataSource(数据源,你可以理解为一个集合)存储ViewState并返回给浏览器。...默认情况下 ViewState 将被启用,并且是由每个控件(而非页面开发人员)来决定存储ViewState 的内容。

    1.8K30

    ASP.NET保持用户状态的九种选择

    随着Web时代的到来,在无状态的HTTP世界管理状态成为Web开发者的一个大问题。最近出现了几种存储和检索数据的不同技术。本文将解释ASP.NET开发者能怎样通过页面请求维护或传递状态。...因为cookie可以存储的数据量很受限制,最好只在cookie中保存键字段,其它的数据保存在数据库或其它的服务器端数据容器。...在的例子,简单地缓存了当前时间,当缓存超期的时候,将给缓存的字符串末尾添加一个星号(*)。在超过时间后,你能通过计算星号的数量来确定缓存超期了多少次。...你也可以通过在浏览器查看的HTML源并检查隐藏窗体字段__VIEWSTATE来确定某个给定的ASP.NET页面ViewState的总共大小。...Web.config文件存储的数据可用于应用程序的整个生命周期。这些数据一般很小,该对象一般用于保持文件位置和数据库连接的字符串。大的数据片最好保存在其它位置。

    1.9K20

    分页解决方案 之 分页算法——Pager_SQL的详细使用方法和注意事项

    一是在Oninit里面赋值,一是在控件内部把属性值保存在Viewstate里面。而我这采用了后者。...Viewstate里面的东东谁然看起来乱七八糟的,但是很容易就可以把它变成能够看懂的信息,那么如果把表名、字段名这些敏感的信息放在Viewstate里面显然是不安全的,所以我就自己写了一个类库,可以把信息保存在隐藏域...Max分页算法只支持一个排序字段,例如: “ID”、“ID desc” 目前其他的分页算法支持多个排序字段,例如:“col1,col2 desc”、“col1,col2,col3” 、“col1 desc...6、多表关联     对于多表关联,是习惯使用视图来解决的,就是数据库里面的视图。关系型数据库嘛,不可避免的就是多表关联,既然数据库已经为我们提供了视图,那么我们为什么不用呢?    ...这个是理由?三五个人一起写代码,不也是可能会乱?那我们就不写代码了吗?我们想出来了三层,用分层的方式来解决“乱”的问题。解决了不就可以了吗?为什么要否定呢?

    82660

    的分页控件(未完,待续)——控件件介绍及思路

    C 主键 的看法是每一个表都要有一个主键,而且是单一字段的主键(不是复合主键)。...第一个特性:select top 11 @id = ID from Table Top 和 给变量赋值都是很常用的方法,但是这种组合不太常见吧。这是在一个偶然的情况下发现的,这么写有什么作用呢?...先来看看@id会得到什么值。@id 得到的是最后一条记录的ID字段的值,前面的记录的值会被覆盖。 假设分页要求是:每页显示10条记录,按照ID字段升序显示。...四、 多种数据库 上面只是考虑了一种数据库(MSSQL)的情况,那么其他的数据库呢?的解决方法是——更换分页算法。不同的数据库使用不同的分页算法。...,查询字段越多存储过程也就越长越不好读懂。

    96870

    ajax怎么解决报414,关于c#:HTTP错误414。请求URL太长。 asp.net

    从下面的文章了解到这是由于查询字符串很长所致: 在web.config有maxQueryStringLength=”2097151″。 这是最大值?...为了解决此问题,应该在web.config设置maxUrl? 如果是这样,支持的最大值是多少? 该怎么办才能解决此错误? 是否可以将URL的某些长字符串替换为整数或Guid?...不知道您的查询字符串为什么这么长。你能缩短?在不进一步了解解决方案和查询字符串的情况下,很难给您任何建议。...为此,您应该考虑一个数据库表并存储所有详细信息参数,并仅将行的ID(主键)反映给用户以添加书签。...将所需的值分配给此类属性,然后根据需要在ViewState或Session添加此类,并在您的应用程序中使用它。 因此,您无需将大量数据传递到查询字符串。 希望这对您有帮助。

    1.5K10

    .NET工作准备--04ASP.NET

    ViewState的类型是System.Web.UI.StateBag,它是存储名称/值对的字典;可以使用户在使用动态页面时获得连续性动作的功能;(就是说ViewState并不是存储在服务器,而是通过不断的在服务器和客户端之间传送...详细机制: 客户申请一个新的带有ViewState字段的页面,第一次申请时ViewState字段内数据为空; 客户提交表单,这是ViewState字段作为表单的一部分被提交,当然这时也为空; 服务器从表单读取...服务器把ViewState对象加密并编码,然后写入ViewSate字段,这时页面ViewState字段就包含了上次提交的表单内控件数据以及服务器代码写入ViewState的数据; 服务器将页面发送到客户端...并且存储了所有ViewState对象内的值.....保证在重启Web应用程序后仍能保留会话状态,并可使会话状态应用于多个Web服务器; sqlserver:() 安装状态数据库systemroot\Microsoft.Net\Framework\

    2K50

    ASP.NET ViewState之详解

    今天我们来了解一下在ASP.NETViewState的作用。 ViewState=视图状态; ViewState的通用解释就是:是 ASP.NET 页存储库,可以存储必须在回发过程中保留的值。...在各个回发之间保存值,而不将这些值存储在会话状态或用户配置文件,将信息存储在视图状态,这样在下次将该页发送到服务器时,代码便可以在页加载事件过程访问这些信息。...然后,它们将被放入页的一个或多个隐藏字段。 大家在开发程序的时候,查看网页源代码。是不是都发现都多了一个ID名为__VIEWSTATE的hidden控件呢。这就是在回发过程中保留的值。 ?...比如:有一个DropDownList控件,然后点击了某个Button控件,在Button对应的click事件下修改了DropDownList的默认选项,这时候,ViewState中就会记录DropDownList...提示:文本框输入类的值都不会存放在ViewState

    1.5K30

    ASP.Net ViewState的实现

    “因为所有状态与辅助进程不存储在一起,所以您可以跨运行于多个计算机上的多个辅助进程对应用程序进行分区。”...4、ViewState 这是我们今天重点讨论的;实际上ViewState并不神秘,就是一个Hidden字段,但是它是服务器控件状态保存的基础;不熟悉的朋友可以用IE查看Html源码,找到一个名为"__VIEWSTATE..."的Hidden字段,其中有一大堆乱七八糟的字符,这就是页面的ViewState。     ...t据我分析应该是一个防止ViewState被改变的Hash值,这个不是很确定,因为反编译的代码实在是很难看,只是了解之后就没仔细看了。   ...最后,以我个人的观点,觉得ViewState的出现很大程度上减轻了程序员的负担,但是要看清的是ViewState的本质,合理的应用它。

    1K30

    常见 Datagrid 错误

    ASP.NET 在每个控件的 ID 前面加上该控件层次结构每个命名容器的 ID,这样 Textbox 将具有唯一的 ID,与页面中所有其他控件的 ID 都不相同。...否则,请对两次回发之间状态信息不会发生更改的各个控件禁用 ViewState,或者对不需要隐藏字段来跟踪自身状态的那些控件禁用 ViewState。...如果要处理以下 Datagrid 事件的任何一部分(或全部),那么还需要在 ViewState 手动存储一些 Datagrid 属性。...例如,在禁用了 ViewState 的 Datagrid 中进行编辑时,只要是在 Page_Load 第一次绑定 Datagrid 之前重新存储 EditItemIndex,且 Datagrid 处于编辑模式...要存储ViewState 字段 ItemCreated 无 ItemDataBound 无 SortCommand 是 SortExpression EditCommand 是 EditItemIndex

    2.3K20

    ASP.Net WebForm温故知新学习笔记:一、aspx与服务器控件探秘

    ProcessRequest方法和Page_Load方法(在此过程,有可能需要访问数据库)来生成aspx页面的所有html内容,最后将生成好的html返回给浏览器端。   ...②通过浏览器提供的开发人员工具查看数据请求报文,可以看到除了提交form的input外,还提交了ASP.Net WebForm预置的一些隐藏字段,而这些隐藏字段则是WebForm为我们提供便利的基础。...例如:有的代码只会在页面第一次加载时才执行(比如从数据库读取数据并显示),这时就应该使用IsPostBack进行判断。 if (!...那么,它是存储在哪个位置又是根据什么来判断的呢?...实际上,IsPostBack属性是根据ViewState的一些特殊的键值对来判断赋值的(因为:每次提交请求后,服务器端都会返回不同的ViewState隐藏域给浏览器端;同样,浏览器每次也会将ViewState

    2.8K42

    自己写的一个分页控件(源码和演示代码)PostBack分页版 for vs2003、SQL Server

    当然这里只是打个比方,并没有按照三层的规范来写这个分页控件,的目的只是想少写点代码。...三、优点     1、不必使用存储过程就可以达到高效率的分页效果。     2、使用两种(或者多种)分页算法,来达到效率和通用的完美统一。当然也可以使用不同的算法应对不同的数据库。     ...5、利用ViewState 来保存一些信息,节省服务器的资源。         ...] from TableName  select top PageSize * from TableName where [排序字段] >= @col  知道排序字段不一定都是 int类型的,所以在...] desc,[ID] 八、海量数据测试结果 cpu:xp3000+ 单核 内存:DDR2 1G 硬盘:串口 测试用数据库:SQL Server2000 里的 Northwind 数据库里的 Products

    1K50

    【开源】QuickPager ASP.NET2.0分页控件V2.0.0.1——分页控件的源码(一) 主体

    WebControl, INamingContainer, IPostBackEventHandler      {         /**////          /// 访问数据库用的实例...["TableIDColumns"].ToString(); }             }         }         #endregion         显示的字段#region 显示的字段...            }         }         #endregion         排序字段#region 排序字段         /**////          ...(true)]         [Category("显示数据的控件ID")]         [DefaultValue("")]         [Localizable(true)]         ...}             else             {                 //Page_Click();                 output.Write("<div id

    90370

    Asp.net页面生命周期

    postDataKey, System.Collections.Specialized.NameValueCollection postCollection),其中参数postDataKey为服务器控件的服务器端ID...10.页面加载(OnLoad==Page_Load):想大家都十分熟悉这个事件了,这里我们可以随心所欲地操作aspx文件上声明的控件了,但除了在该事件实例化的服务器控件。...如果您需要存储大量的数据项,可以打开视图状态分块,这样会自动将数据分割到多个隐藏域。 ASP.NET框架提供了MaxPageStateFieldLength属性,用来获取或设置页状态字段的最大长度。...其属性值表示页面状态字段的最大长度,以字节为单位。...在此阶段必须释放对昂贵资源的引用,如内存的退出、数据库的连接等。 20.卸载(OnUnload):页面生命周期正式结束。

    2.4K80

    【开源】的分页控件正式命名为QuickPager ASP.NET2.0分页控件

    对于只针对数据库来分页的情况,每次分页的时候,都要再写点提取数据的代码,真是麻烦。很懒,自然不愿意接受这种情况,要做到,只写几行简单的代码就可以实现分页的全部功能!...好像有点过度设计的嫌疑,也在想,用得着这么费事?真的需要这么写?     ...看到网上很多介绍分页算法的文章,大部分都是直接给出一个存储过程,在这个存储过程里面组合SQL语句,要知道,看这样的代码是多么的郁闷呀。     ...当然,你可以为了能够缓存执行计划而一个表使用一个存储过程,就像吴旗娃的网站里提供的那个生成存储过程的模板提供的存储过程, 但是这样有很多的问题:会增加很多的存储过程、查询条件不容易灵活设置(查询字段越多越不好编写...最后给最后一个排序字段加了一个非聚集索引(好像还给一个字段加了一个非聚集索引),问题解决了,查看最后几页,在两秒内就可以显示出来数据(局域网)。这样可与也基本可以接受了。

    94050

    C# .NET面试系列八:ADO.NET、XML、HTTP、AJAX、WebService(二)

    用途: 用于存储页面上控件的状态信息,避免在 postback 时丢失用户输入或操作。区别: 存储在页面,通过隐藏字段传输。...Cookie 存储在客户端,通过 HTTP 头传输。ViewState 存储在客户端,通过隐藏字段传输。37. ASP.NET 的六大对象有哪些?...ViewState 主要用于存储控件的状态信息,以便在页面回发(PostBack)时能够还原这些控件的状态。例如,文本框输入的文本、复选框的选中状态等信息都可以保存在 ViewState 。...以下是一些可能的解决方法:1、数据库索引优化确保数据库字段上存在适当的索引,以加速检索操作。适当的索引可以显著提高查询性能。...2、使用存储过程将数据访问逻辑移到数据库,并使用存储过程执行数据操作。存储过程可以在数据库服务器上执行,减少数据传输的开销。

    25010
    领券