【问题标题】:How to store information "per browser tab" in ASP.NET MVC?如何在 ASP.NET MVC 中存储“每个浏览器选项卡”信息?
【发布时间】:2015-07-13 20:55:31
【问题描述】:

在 MVC 应用程序中,我有一个两页进程。在第一页上,我们收集信息,使我们能够确定要更新的数据库记录。在第二页上,我们收集了用于更新此记录的新值。为了让它工作,我们需要一种方法来在两个页面之间保存信息,包括一些记录 ID。

我认为有两种方法可以做到这一点,但都有一些问题。

  1. 将信息存储在 Session 对象中。

    只要用户不打开第二个浏览器窗口或选项卡,此功能就有效。如果他这样做了,他就有可能将修改应用于错误的记录。假设他打开选项卡 1 并完成第一步。记录 id 1 存储在 Session 对象中。用户然后打开选项卡 2 并完成第一步。然后记录 id 2 存储在 Session 对象中覆盖记录 id 1。然后用户返回第一个选项卡并完成第二步,以为他正在编辑记录 1,但实际上他将编辑记录 2。

  2. 将信息存储在页面上的隐藏字段中。

    这将解决解决方案 1 的问题,但对于不怀好意的用户来说,更改记录 ID 以覆盖任何记录将是微不足道的。

在输入这个问题时,我只是想到了第三种解决方案。这是这两者的混合体,但我不确定它是否完全安全。我们可以在页面的隐藏字段中存储一个随机 id,并使用它作为我们用来访问会话对象中数据的键的前缀。我认为这会奏效。这可以像解决方案 2 一样被利用吗?

还有其他“按标签”而不是“按会话”安全存储数据的好方法吗?

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-mvc-4


    【解决方案1】:

    考虑到方式 2,您可以检查安全服务器端。如果用户对特定记录没有修改权限,则服务器不得保存它。否则,他/她正在修改对其具有修改权限的记录,无论他/她是通过标准 UI 执行此操作还是在其下进行黑客攻击都无关紧要。

    【讨论】:

      【解决方案2】:

      我认为您混淆了两件事 - 授权和传递数据。

      如果用户被授权对“另一条记录”进行操作,那么他是否“缓和隐藏”并不重要,因为他也被授权更改另一条记录。没有人会故意这样做。意味着 - 您只需要检查用户是否有权在用户的每个帖子中执行操作,即在每个控制器方法中(这是始终验证所有用户输入服务器端的正常做法)。

      我建议你使用“隐藏字段”。

      【讨论】:

        【解决方案3】:

        如果您想在不同的选项卡中分隔信息,您应该使用sessionStorage,每个打开的浏览器选项卡都不同。

        你可以这样设置:

        sessionStorage.setItem("perTabValue", "true");
        

        那么你就可以得到你的价值了:

        var x = sessionStorage.getItem("perTabValue");
        if(x === "yourValue"){
          //do anithing you want
        }
        

        【讨论】:

        • 我认为我需要将信息存储在服务器端,因此用户无法对其进行调整。
        • 我想唯一的方法是通过 ajax 将它发送到服务器。 here is good deep answer.
        猜你喜欢
        • 2015-10-19
        • 1970-01-01
        • 2012-05-28
        • 1970-01-01
        • 1970-01-01
        • 2015-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多