【发布时间】:2023-03-15 03:00:01
【问题描述】:
我有一个单页应用程序,它必须向服务器发送一些查询(嗯,http get 或 post,等等)并了解会话是否仍然存在。
更具体地说,用户是否仍然登录。
我已将 SlidingExpiration 设置为 true,因此框架将在每次处理过期窗口一半的请求时重新发出一个新的 cookie,并将 ExpireTimeSpan 设置为 2 分钟。
我有一个如下所示的 api 控制器:
[System.Web.Http.RoutePrefix("api/session")]
[SessionState(System.Web.SessionState.SessionStateBehavior.Disabled)]
public class SessionController : ApiController
{
[System.Web.Http.Route]
public int GetSessionState()
{
return User.Identity.IsAuthenticated ? 1 : 0;
}
}
即使在 10 分钟后,这个也总是返回 1。
我的猜测是 SessionState 属性不应该在这里工作。
所以经过相当多的研究后,我实际上不再确定问题的根源。我是唯一一个做这种事情的人吗?
有谁知道如何解决这个问题并满足要求?
谢谢,
【问题讨论】:
-
难道是通过让您的应用程序执行对该控制器的调用,会话现在已刷新?我想该属性应该可以防止这种情况发生,但我认为您可以检查到期时间是否已过期或已更新?
-
我尝试不发送呼叫,2 分钟后,如果我刷新页面,我就退出了。如果我发送电话,我永远不会退出。也许该属性不打算在 WebApi 控制器上使用。但是我很想知道我应该使用哪种属性/技术来让它在 WebApi 上工作
-
所以我尝试了一个朋友的解决方案,该解决方案包括从响应中删除 Cookie。这是利用 SlidingExpiration 并确保浏览器不会获取更新的 cookie。但是,调试该解决方案时,我得到了 HttpContext.Current.Response.Cookies 为空的奇怪结果。我真的不明白那东西现在是如何工作的......
-
好吧,显然 OWIN 在这里使用他自己的 cookie 存储 HttpContext.GetOwinContext().Response.Cookies... 但是,这仍然不包含我的会话 cookie...
标签: asp.net asp.net-mvc session asp.net-identity