C# 当使用仅HTTP会话cookie时,客户端如何知道其会话何时将过期?
我的网站是一个AngularJS SPA,在Owin上运行Web API/SignalR后端。身份验证使用存储在浏览器本地存储器中的JSON Web令牌(JWT)进行管理 根据公司指令,我正在从本地存储中的JWT转移到具有滑动过期的仅HTTP同一站点会话cookie。一切都很好,除了一个障碍: 我的应用程序显示个人健康信息(PHI),因此我必须在会话到期后自动关闭应用程序。使用JWT,我可以检查“exp”声明,自动确定会话已过期,并从屏幕上删除PHI。但是使用仅HTTP的cookie,我无法访问令牌的任何部分 当我发布cookie时,我知道过期时间,并可以相应地通知浏览器。然而,当Owin刷新cookie时,浏览器将需要收到新到期的通知,我不知道如何做到这一点 我可以存储第二个cookie,它不仅是HTTP,而且只包含会话过期时间,但是每当我刷新主身份验证cookie时,我都必须刷新该cookie 如何告知浏览器会话何时将过期,并在过期更改时保持浏览器更新?当Owin刷新cookie时,如何将事件处理程序附加到 以下是我当前的cookie配置:C# 当使用仅HTTP会话cookie时,客户端如何知道其会话何时将过期?,c#,angularjs,cookies,owin,session-cookies,C#,Angularjs,Cookies,Owin,Session Cookies,我的网站是一个AngularJS SPA,在Owin上运行Web API/SignalR后端。身份验证使用存储在浏览器本地存储器中的JSON Web令牌(JWT)进行管理 根据公司指令,我正在从本地存储中的JWT转移到具有滑动过期的仅HTTP同一站点会话cookie。一切都很好,除了一个障碍: 我的应用程序显示个人健康信息(PHI),因此我必须在会话到期后自动关闭应用程序。使用JWT,我可以检查“exp”声明,自动确定会话已过期,并从屏幕上删除PHI。但是使用仅HTTP的cookie,我无法访问
app.UseCookieAuthentication(new CookieAuthenticationOptions()
{
AuthenticationMode = AuthenticationMode.Active,
CookieHttpOnly = true,
ExpireTimeSpan = TimeSpan.FromHours(2),
SlidingExpiration = true,
CookieName = "Auth"
});
我对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);
使用HTTP的非常可靠和简单的方法是对此进行endoint并进行检查,即每秒检查一次:
module.run(($interval) = > {
$interval(() => {
$http.get('/checkToken').then((result) => {
if (result.data.expired) {...}
}, (error) => ...)
}, 1000);
})
在checkToken
端点的服务器上,您可以执行所有需要的检查
<>为了更好的实时客户机-服务器交互,你可以考虑使用套接字,但这是另一个故事。这不考虑cookie的更新。这不会导致AuthCookie被更新吗?这取决于你是如何实现它的。