2012-01-05 29 views
0

我开发一个Web应用程序中,我打算到一些值存储在会话变量。我打算使用SessionState服务,因为我计划使用会话变量的主要原因是为了减少部分数据库访问(每个用户的最大数据量为500字节)。什么照顾,以确保ASP.NET会话变量

假设用户都有自己的会话ID的关键,我必须做什么,用户不能访问我隐藏会话集合中的变量?我也需要关心ViewState(虽然我打算在这个应用程序中关闭它,但很高兴知道)

+0

定义“访问”。如果用户窃取了另一个用户的会话ID,并且您在页面上显示会话的内容,那么这是一种访问,不是吗? – 2012-01-05 16:58:29

回答

2

我必须做什么,用户无法访问我隐藏的变量会话集合?

除非用户有权访问您的服务器(这是存储会话数据的地方),否则您不应该太担心。但是我猜如果用户有权访问你的服务器,你会比会话数据有更大的问题担心。

客户端不能访问其上存储会话内的数据。只有服务器端代码才能访问它。因此,您需要决定要将什么信息发送给客户端。用户看到的所有内容都是会话ID(存储在cookie中),而不是实际的会话数据。该ID由用户在每个请求中发送,以便服务器可以找到相应的数据,这些数据将存储在您已配置的状态服务器的内存中。

0

正如达林指出,你应该确定使用默认会话实现,但如果你想确保你在会话存储的数据是完全不可读的,你可以到储存之前对其进行加密。

1

用户将只接收会话ID字符串,其被存储在cookie中。因此,他们无法访问会话对象中的各个值(除非这些值以任何方式呈现给页面)。

随着ViewState的,属性包与所有的值都序列化到页面上的隐藏表单域。任何关心查看的用户都可以轻松地对这些进行反序列化(这只是一个简单的Base64序列化)。但是,ASP.NET确实能够检查这些值是否已被篡改,并且还可以使用服务器上的私钥对其进行加密。不过,我建议不要将任何“机密”的东西放入视图状态。或者,如你所说,如果不需要,就关掉它。