【问题标题】:Preventing users from performing actions which are more than 15 minutes apart防止用户执行间隔超过 15 分钟的操作
【发布时间】:2016-09-22 19:52:22
【问题描述】:
我想阻止用户执行相隔超过 15 分钟的操作,但我真的不需要 Session 对象来保存任何数据。
将SessionState timeout 设置为 15 分钟是否足够了,尽管我的代码中没有使用 Session 对象?
有没有办法只通过配置,无需代码,或者我应该在 Session 中放置一个虚拟对象,然后依赖超时?
【问题讨论】:
标签:
asp.net-mvc
session
iis
web-config
session-state
【解决方案1】:
您可以使用MemoryCache 绝对过期,而不是设置全局会话超时(您永远不知道何时开始使用会话对象)。使用这个通用方法:
public T PreventAction<T>(string uniqueUserId, string action, DateTimeOffset absoluteExpiration, Func<T> callback) where T : class
{
string key = uniqueUserId + action;
T item = MemoryCache.Default.Get(key) as T;
if (item != null)
return null;
MemoryCache.Default.Add(key, item, absoluteExpiration);
return callback();
}
您可以通过实现以下代码来阻止用户每隔 x 时间做一次“某事”:
// User should only be allowed to calculate 2+2 every 15 minutes
PreventAction(uniqueUserId, "Calculate2+2", DateTime.Now.AddMinutes(15), () =>
{
var calculation = 2+2;
Console.WriteLn(calculation);
});