为了账号安全,请及时绑定邮箱和手机立即绑定

当使用仅HTTP的会话cookie时,客户端如何知道会话何时到期?

当使用仅HTTP的会话cookie时,客户端如何知道会话何时到期?

C#
慕森王 2021-05-21 18:16:43
我的网站是AngularJS SPA,其Web API / SignalR后端在Owin上运行。身份验证通过存储在浏览器本地存储中的JSON Web令牌(JWT)进行管理。根据公司指令,我正在从本地存储中的JWT迁移到具有滑动到期期限的仅HTTP的同一站点会话cookie。一切都很好,除了一个障碍:我的应用程序显示个人健康信息(PHI),因此会话期满后,我必须自动关闭该应用程序。使用JWT,我可以检查“ exp”声明以自动确定会话已过期,并从屏幕上删除PHI。但是使用仅HTTP的cookie,我无法访问令牌的任何部分。当我发布Cookie时,我知道其有效期并可以相应地通知浏览器。但是,当Owin刷新cookie时,需要通知浏览器新的过期时间,我不确定该怎么做。我可以存储第二个cookie,该cookie不仅包含HTTP,而且仅包含会话到期时间,但是每当刷新主身份验证cookie时,我都必须刷新该cookie。我如何告诉浏览器会话何时到期,并且当到期时间更改时如何保持浏览器更新?Owin刷新cookie时,如何附加事件处理程序?这是我当前的cookie配置:app.UseCookieAuthentication(new CookieAuthenticationOptions(){    AuthenticationMode = AuthenticationMode.Active,    CookieHttpOnly = true,    ExpireTimeSpan = TimeSpan.FromHours(2),    SlidingExpiration = true,    CookieName = "Auth"                });
查看完整描述

2 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

我不是很熟悉Angular或Owin,但是使用受法律保护的教育数据,我们通过滴答秒数,然后在AJAX调用完成后在处理程序中进行重置来解决该问题。


准系统版本看起来像这样:


var Countdown = {};

var Countdown.length = 3600 /* your session timeout here */;

var Countdown.seconds = Countdown.length;


var Countdown.tick = function() {

    Countdown.seconds--;

    if (Countdown.seconds == 0) {

         /* handle timeout */

    }

    /* any additional processing code here */

}


var Countdown.reset = function() { 

    Countdown.seconds = Countdown.length;

    /* any additional processing code here */

}


window.setInterval(Countdown.tick, 1000);


查看完整回答
反对 回复 2021-05-23
  • 2 回答
  • 0 关注
  • 193 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信