1

我有一个系统可以让我的 Intranet 用户处理数据库记录。基本上记录被勾选/取消勾选,这会更新每个放置到单独会话变量中的运行总计,然后提交到不同的数据库。每隔一段时间就会发生一些奇怪的事情,这些会话变量中的值可能会翻倍(或更糟),而我从来没有能够复制这一点(它看起来确实是完全随机的,幸运的是很少见)。

我正在考虑可能的重写,并且想知道是否最好继续使用 cookie 临时存储值,然后强制它们过期以清除这些值。

作为这些的替代方案,ViewState 是否适用于此处?我已经简要地阅读了它,但没有明确设置视图状态值的经验。

我主要担心的是我的变量同时受到其他人使用系统的影响,但我认为会话变量的部分意义在于它们只能由创建它们的会话访问?

4

1 回答 1

4

ViewState 仅用于回发数据,它不能替代任何一个,因为它在整个会话中都不是持久的。毕竟这是一个“视图”状态:)。

会话变量实际上使用 cookie,但以一种比简单地在其中存储所有相关数据更安全的方式。直接将值存储在 cookie 中就可以了,但是使用一些简单 JavaScript 的用户可以修改其 cookie 的内容。如果您对此不满意,请使用会话。

与将原始数据存储在 cookie 中相比,会话的一个小缺点是数据存储在服务器上,这会占用空间和计算资源。不多,但是如果您要拥有一个高流量的站点或正在考虑在会话中存储所有东西和厨房水槽,则需要考虑一下。

那么会话是如何工作的呢?它们存储特定于每个会话用户的数据,可通过密钥访问。该密钥通常存储在客户端机器上的 cookie 中。当他们访问一个页面时,他们的 cookie 密钥被传输到服务器并且相关数据可以访问。要记住的一件大事是 cookie 的安全性是会话安全性的关键。如果您的站点容易受到 XSS 攻击(整个其他帖子的主题),则用户可以窃取另一个人的 cookie 并伪装成他们,因为他们将拥有标识其他用户会话的 id。

所以总的来说,很难告诉你使用什么系统。就我个人而言,我倾向于使用会话,因为它们易于实现,并且没有用户可修改数据的附加安全性很好。最后,您必须查看您的架构并决定最适合您的架构。

于 2012-08-07T03:52:10.170 回答