Предотвращение Выполнения пользователями действий, разделенных более чем 15 минутами

Я хочу запретить пользователям выполнять действия, которые разделены более чем 15 минутами, но мне не нужен Sessionобъект для сохранения каких-либо данных.

Достаточно SessionState timeoutли 15 минут, хотя я не использую Sessionобъект в коде?

Есть ли способ сделать это просто через конфигурацию, без кода, или я должен поместить фиктивный объект в сеанс, а затем полагаться на тайм-аут?

1 ответ

  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);
    });