我有一个用户登录的内部网站。此数据保存为 cookie。从那里,用户继续他们的快乐之路。应用程序每隔一段时间就会查询身份验证记录以确定用户拥有哪些权限。
我的问题是:在需要时仅在 cookie 中查询用户数据或将用户信息保存在视图状态中是否更有效?
[编辑] 如下所述,Session 也是一个选项。
我有一个用户登录的内部网站。此数据保存为 cookie。从那里,用户继续他们的快乐之路。应用程序每隔一段时间就会查询身份验证记录以确定用户拥有哪些权限。
我的问题是:在需要时仅在 cookie 中查询用户数据或将用户信息保存在视图状态中是否更有效?
[编辑] 如下所述,Session 也是一个选项。
就个人而言,我更喜欢使用会话来存储东西,尽管这里的其他开发人员似乎认为这是一个禁忌。
有一个警告:您可能希望将用户的 IP 存储在会话中,并将其与用户的当前 IP 进行比较,以帮助避免会话劫持。可能这里的其他人对如何防止会话劫持有更好的想法。
Viewstate 特定于他们正在查看的页面,因此一旦他们沿着他们的快乐方式前进,它就消失了。不是持久化数据的好方法。
最好的办法是使用 Forms Authentication,它内置于 ASP.NET 中,您还可以将任何用户特定的信息推送到 Forms Authentication Ticket 的值中。您可以在其中(加密后)获得 4000 个字节,这些字节应该包含您需要的任何内容。它还将负责允许和拒绝用户访问网站上的页面,您可以将其设置为在需要时过期。
存储在会话中是一个禁忌,因为它的扩展性非常差(占用服务器上的资源),并且对于具有多个浏览器连接到同一服务器的用户来说可能会很烦人。有时这是不可避免的,但如果可以的话,你应该努力避免它。
您可以使用会话数据 - 这样您就知道一旦将其存储在那里,用户就无法通过更改查询字符串来愚弄它。
我会使用cookie方法。会话没问题,但在重新编译时会被 asp.net 处理掉,如果你想在会话之后保留它,你必须使用非会话 cookie。此外,如果您曾经使用过状态服务器,它基本上会做同样的事情(将会话存储在数据库中)。会话就像一个快速而肮脏的修复,真正的男人使用cookie。