0

所以我在MVC4中建立了一个网站,我有一系列的服务,其中我已经构建了一个dll,它包装了所有的调用并自动将xml更改为指定的对象。因此,调用者不会收到 xml,而是会收到一个 CustomReturn 对象,该对象具有 ErrorCode、ErrorMessage、Token 和 Payload,其中的有效负载已经被翻译成一个 List 等。

现在,要对我们的后端服务进行 90% 的调用,需要一个 Token,并且在成功调用返回时,将返回一个新的 Token。为了管理这个令牌,它被存储在一个 cookie 中,每次调用都会传递,这样服务器就可以管理令牌,而不是让浏览器 javascript 来做。

所以我创建了一个位于我的控制器顶部的属性,它查找这个 cookie、解密令牌并将其存储在自定义的 HttpContext.Current.User 中。

最后,我的控制器功能基本上是这样的:

    [HttpGet]
    public T MyFunction(string venue)
    {
        var asr = Services.GetSomething(Token, venue);
        SetAuthTicket(asr.Token);
        return asr.Payload;
    }

对不起,很长的背景故事,但这是我的问题所在:

在我的页面上,我有一个功能可以根据用户请求获取和显示数据,然后每 30 秒自动更新相同的数据。

我希望在页面中实现自动注销功能,该功能检测到用户在 x 时间内没有提出请求并将其注销...

最初我打算通过验证令牌来做到这一点,因为在 x 次之后它变得无效。

但是目前自动更新使令牌保持有效,因为它们进行了相同的调用来重置令牌......

问题

在我的站点中实现自动注销功能的最佳选择是什么?我应该创建一个不会重置令牌的调用的单独副本吗?或者我应该编写一些 javascript 来检测鼠标移动或点击或其他东西并以这种方式将它们注销?

4

1 回答 1

0

如何标记您的每 30 秒请求?例如添加头部或任何指示请求由javascript触发的内容,因此不更新计时器/令牌?

来自用户的请求不会有这个标志,并保持计时器/令牌更新

例如,将一些参数附加到您的 ajax“get”请求中,例如"source=js". 在服务器端,你可以告诉这是一个自动请求,如果它Request["source"] == "js"

于 2013-05-25T04:11:18.297 回答