【问题标题】: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);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-15
      • 1970-01-01
      • 2012-01-05
      相关资源
      最近更新 更多