【发布时间】:2015-07-13 20:55:31
【问题描述】:
在 MVC 应用程序中,我有一个两页进程。在第一页上,我们收集信息,使我们能够确定要更新的数据库记录。在第二页上,我们收集了用于更新此记录的新值。为了让它工作,我们需要一种方法来在两个页面之间保存信息,包括一些记录 ID。
我认为有两种方法可以做到这一点,但都有一些问题。
-
将信息存储在 Session 对象中。
只要用户不打开第二个浏览器窗口或选项卡,此功能就有效。如果他这样做了,他就有可能将修改应用于错误的记录。假设他打开选项卡 1 并完成第一步。记录 id 1 存储在 Session 对象中。用户然后打开选项卡 2 并完成第一步。然后记录 id 2 存储在 Session 对象中覆盖记录 id 1。然后用户返回第一个选项卡并完成第二步,以为他正在编辑记录 1,但实际上他将编辑记录 2。
-
将信息存储在页面上的隐藏字段中。
这将解决解决方案 1 的问题,但对于不怀好意的用户来说,更改记录 ID 以覆盖任何记录将是微不足道的。
在输入这个问题时,我只是想到了第三种解决方案。这是这两者的混合体,但我不确定它是否完全安全。我们可以在页面的隐藏字段中存储一个随机 id,并使用它作为我们用来访问会话对象中数据的键的前缀。我认为这会奏效。这可以像解决方案 2 一样被利用吗?
还有其他“按标签”而不是“按会话”安全存储数据的好方法吗?
【问题讨论】:
标签: asp.net asp.net-mvc asp.net-mvc-4