【发布时间】: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