重复的cookie查询还是在viewstate中存储?哪个更好的做法?

时间:2020-03-06 15:05:12  来源:igfitidea点击:

我有一个供用户登录的内部网站。此数据另存为cookie。用户从那里继续快乐地前进。应用程序经常会查询身份验证记录,以确定用户拥有哪些权限。

我的问题是:仅在需要时查询cookie以获取用户数据,还是将用户信息保存在viewstate中,效率更高?

[编辑]如下所述,会话也是一种选择。

解决方案

就个人而言,我更喜欢使用会话来存储内容,尽管这里的其他开发人员似乎认为这是不行的。

有一个警告:我们可能希望将用户的IP存储在会话中,并将其与用户的当前IP进行比较,以帮助避免会话劫持。可能其他人对如何防止会话劫持有更好的了解。

我们可以以这种方式使用会话数据,即我们知道将会话数据存储在其中之后,用户就无法通过更改查询字符串来摆弄它。

Viewstate特定于他们正在查看的页面,因此一旦他们沿自己的喜好走,它就消失了。这不是持久保存数据的好方法。

最好的选择是使用Forms Authentication,它内置于ASP.NET中,我们还可以将任何特定于用户的信息放入Forms Authentication Ticket的Value中。我们可以在其中(加密后)获得4000个字节,该字节可以容纳所需的内容。它还将负责允许和拒绝用户访问网站上的页面,并且可以将其设置为在需要时过期。

会话中的存储是不行的,因为它的伸缩性非常差(占用了服务器上的资源),并且对于具有多个浏览器连接到同一服务器的用户而言,这可能会很烦人。有时这是不可避免的,但是如果可以的话,我们应该竭尽全力避免它。

我会使用cookie方法。会话还可以,但是在重新编译时会被asp.net丢弃,并且如果要在会话后仍然保留它,则必须使用非会话cookie。同样,如果我们曾经使用过状态服务器,则它实际上在做同样的事情(将会话存储在数据库中)。会话就像一个快速而肮脏的修补程序,真正的男人会使用Cookie。