【问题标题】:How to prevent users to add entries for a given time using ASP NET MVC? [closed]如何防止用户使用 ASP NET MVC 在给定时间内添加条目? [关闭]
【发布时间】:2022-01-07 08:42:23
【问题描述】:

我有这种情况:

添加产品但阻止其他用户添加 1 分钟。 1分钟后,他们通常可以添加一个。

添加产品不会被添加它的用户自己阻止 但对于其他人。

我有这个,它就像一个魅力:

 public async Task<JsonResult> AddProducts(string citaId, string paciente, string medico, string modalidad)
 {
    var usuario = System.Web.HttpContext.Current.User.Identity.GetUserName();

                if (Session["User"] != null)
                {
                    if(Session["User"].ToString() != usuario)
                    {
                        var med = await _context.MEDICOS.FindAsync(medico);

                        var objetoerrr1 = new
                        {
                            type = "error",
                            message = $"you cannot add a product, WAIT 1 MIN."
                        };

                        return Json(objetoerrr1, JsonRequestBehavior.AllowGet);
                    }
                    
                }

... the rest of the code for adding a product

// create a session
Session["User"] = usuario;
Session.Timeout = 1;

但我的问题是,当使用不同的浏览器或 PC 时它无法正常工作,并且在不同的设备中会话是空的。

嗯,我之前从未在ASP NET MVC5 使用过会话,所以当我听到这个要求时,我想到了会话,所以我使用了它们。

我怎样才能做到这一点?我应该使用数据库来存储会话还是什么?或者我不应该为这种方法使用会话吗?

【问题讨论】:

  • Session 在这里是完全错误的方法。它用于将数据存储在与特定计算机上的特定浏览器关联的服务器上。打开不同的浏览器或使用不同的计算机将使用不同的会话。如果用户清除了他们的 cookie,他们还将获得一个新的会话。 ASP.NET Session State Overview
  • 是的,您需要在服务器端使用某种持久性存储来存储添加产品时的信息并根据该信息执行授权。
  • 没错,它是关于并发的,但是客户要求这种方法,比如在给定的时间内阻止它。
  • 假设您已正确完成用户身份验证/授权,我怀疑您的任务实际上与concurrency 有关。

标签: c# asp.net-mvc


【解决方案1】:

您应该将会话保存到数据库中,不仅是为了这个,也是出于安全原因。并为该会话提供一个唯一标识符(并将其保存在 cookie 中并每次检索并检查它),以便了解登录时间戳、注销时间戳、防止浏览器之间的 cookie 复制、注销后防止 cookie 复制、防止浏览器复制,重复的会话,如果角色在用户登录的同时发生变化,等等。

当然有很多方法可以在没有数据库的情况下做到这一点,但这是我的答案。我只使用数据库,因为我将用户登录信息保存到数据库中,作为他们的角色。

【讨论】:

    猜你喜欢
    • 2016-11-17
    • 2014-07-14
    • 2018-01-11
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 2012-10-14
    相关资源
    最近更新 更多