【问题标题】:How to handle session in asp.net mvc如何处理asp.net mvc中的会话
【发布时间】:2013-02-09 01:54:18
【问题描述】:

如何在 Asp.Net MVC 中做到这一点?

  • 活动计时器:当用户在页面上导航时(意味着执行调用ActionResult 的操作),计时器将重置。
  • 当用户超过 15 分钟没有进行任何活动时,系统会提示他并询问“你还在吗?” (Yes/LogOut),如果他点击是,那么活动计时器将归零,并重新开始计数。
  • 此活动计时器对于每个用户必须是唯一的,并且必须在注销时销毁。

请,请!对我有耐心!我不知道该怎么做。

我已经发布了这个question,但我没有得到任何解决这个问题的答案。所以我打算从一开始就做,我需要一些帮助/指导才能正确地做到这一点。
任何参考链接或教程将不胜感激!

【问题讨论】:

  • 我可能遗漏了一些东西,但我认为你可以在没有操作过滤器的情况下做到这一点。我猜计时器会在每次视图渲染时重置(如果已登录),十五分钟后触发,然后在他们回答后重置。如果是这样,我可以想到一个相当简单的设计。

标签: c# asp.net asp.net-mvc asp.net-mvc-3 session


【解决方案1】:

我会在客户端处理这个问题。创建一个对象来封装功能。

类似:

var UserInactivityMonitor = UserInactivityMonitor || {};
UserInactivityMonitor = (function (module) {
    var inactivityIndex;
    var promptIndex;
    var timer;

    module.startInactivityMonitor = function () {
        module.timerTick();
    };

    module.timerTick = function () {
        inactivityIndex--;
        if (inactivityIndex === 0) {
            module.fireInactivityAlert();
        }

        if (inactivityIndex === promptIndex) {
            module.fireIdlePrompt();
        }

        timer = setTimeout(module.timerTick, 1000);
    };

    module.fireIdlePrompt = function () {
        var response = confirm('are you stil there?');
        if (response === true) {
            module.resetInactivityIndex();
        }
    };

    module.resetInactivityIndex = function () {
        inactivityIndex = 15;
        promptIndex = 5;
    };

    module.fireInactivityAlert = function () {
        alert('Inactivity alert!');
    };

    module.initialize = function () {
        module.resetInactivityIndex();
        module.startInactivityMonitor();
    };

    return module;
})(UserInactivityMonitor || {});

将 inactivityIndex 设置为在不活动事件触发之前将经过的秒数。将 promptIndex 设置为当用户仍然存在时将被提示的剩余秒数。上面的代码将不活动超时设置为 15 秒,并且将在剩余 5 秒时调用空闲提示。

在页面加载时启动不活动计时器:

$(function () {
    UserInactivityMonitor.initialize();
});

在任何 AJAX 请求中,重置计数器:

 $("#fooButton").on('click', function () {
        $.ajax(
            {
                url: $("#buttonClickPostUrl").val(),
                data: {
                    someData: 'data'
                },
                type: 'POST',
                complete: function () {
                    UserInactivityMonitor.resetInactivityIndex();
                }
            });
    });

如果服务器正在维护会话状态,那么您将需要向服务器发出请求以终止会话,并可选择将浏览器引导至事件的相应页面。您可以在 fireInactivityAlert() 函数中执行此操作。

【讨论】:

  • 你的意思是我必须这样做$(document).click(function() { //Call UserInactivityMonitor });捕获页面上的所有点击事件并将其视为活动,然后重置计时器?
  • 不完全是。您指的是 ajax 请求代码示例还是页​​面加载示例?每当发生完整页面加载时(IE,第一次用户请求页面),您都希望启动非活动计时器。页面加载示例展示了如何使用 jQuery 执行此操作。 ajax 代码示例展示了如何在完成 ajax 请求(失败与否)时重置非活动计数器,该示例再次显示了使用 jquery 的 ajax 请求。您必须将该示例模塑到您现有的代码库中。 ajax 示例的要点是 resetInactivityIndex() 函数调用。
猜你喜欢
  • 1970-01-01
  • 2016-03-27
  • 2020-02-19
  • 1970-01-01
  • 1970-01-01
  • 2016-09-15
  • 1970-01-01
  • 2011-09-25
  • 2010-09-26
相关资源
最近更新 更多