2012-08-06 89 views
1

我有一个系统可以让我的Intranet用户处理数据库记录。基本上,记录是勾选/未勾选的,这会更新每个放入单独会话变量中的运行总数,然后将其提交给不同的数据库。经常发生奇怪的事情,这些会话变量中的值可能翻倍(或更糟糕),我从来没有能够复制它(它似乎完全是随机的,幸运的是很少见)。会话变量或cookie

我在考虑一个可能的重写,并且想知道是否更好地沿着使用cookie临时存储值的方式,然后强制它们到期以清除这些值。

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

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

+0

您是否阅读过此文件:** http://msdn.microsoft.com/en-us/library/ms972976.aspx** – 2012-08-06 15:02:09

+0

不,但我现在就可以。 – ajguk 2012-08-06 15:04:53

+0

我承认我只对系统有一个粗略的理解,但为什么在更新实际的db之前使用临时存储(session,viewstate,cookies等)? – 2012-08-06 17:45:08

回答

4

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

会话变量实际上使用cookie,但采用更安全的方式,而不是简单地将所有相关数据存储在其中。只需将值直接存储在cookie中即可,但具有一些简单JavaScript的用户可以修改其Cookie的内容。如果你不满意,然后使用会话。

与在cookie中存储原始数据相比,会话的一个小缺点是数据存储在服务器上,该服务器占用空间和计算资源。没有多少,但是如果你想要拥有一个高流量的网站,或者正在考虑在会话中存储所有内容和厨房水槽,那么就需要考虑一些问题。

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

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

+0

嗯,我基本上在会话中存储多达9个值,然后将这些值写入数据库,然后在重新开始之前重置它们。我担心的是,如果这是有道理的,我会得到某种“泄漏”,有时候就是说30的值。00会被写入数据库,并且会沿着它的某个地方增加一倍甚至三倍。我无法看到使用会话变量,这可能会被另一个用户在不同的会话/机器中更改,所以在我的代码中可能会有些不对劲。感谢您的回答,这非常有帮助! – ajguk 2012-08-07 08:43:47

+0

我会想象你的代码中有东西会导致问题。除非你有XSS攻击(当你允许人们在你的站点公开页面上发布未转义的HTML时,通常会被利用),但是如果你只是运行一个不太可能发生的小站点。会话变量管理起来很复杂,但是ASP.NET为你做了所有的工作,所以如果这不是黑客行为,那么我认为它会成为代码中某处的问题。 – 2012-08-07 08:46:56

+0

我会逐行检查一下,看看能否发现任何问题。我可以问 - 我的会话变量,当他们写入数据库时​​,我通过执行'Session(“variablename”)= 0'来清除它们。 这是正确的方法吗? – ajguk 2012-08-07 08:52:46