首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >尽管会话丢失,Owin仍然对用户进行身份验证。

尽管会话丢失,Owin仍然对用户进行身份验证。
EN

Stack Overflow用户
提问于 2014-04-07 11:18:12
回答 1查看 2.6K关注 0票数 4

我有一个ASP.NET MVC 5网站与自己的认证。每个用户在基础数据库中都有不同的凭据,该数据库还用于通过自定义UserManager对用户进行身份验证。在UserManager.FindAsync返回之前,我将用户名/密码存储在会话状态,因为应用程序需要在同一用户随后的任何请求中使用它们进行数据库访问。

当会话丢失(例如,AppDomain回收)时,凭据将随之丢失。但是Owin继续对用户进行身份验证,可能是基于浏览器发送的cookie。我最终得到的是一个经过认证的用户..。没有会话,因此没有数据库凭据。

再现这种行为的最简单的方法是创建一个新的ASP.NET MVC 5应用程序,并使用单个用户帐户身份验证,并在AccountController.SignInAsync方法的末尾添加一些会话数据。

代码语言:javascript
复制
private async Task SignInAsync(ApplicationUser user, bool isPersistent)
{
    AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
    var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
    AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);

    HttpContext.Session["Data"] = "Data";
}

然后,尝试在任何控制器中检索此信息。

代码语言:javascript
复制
public ActionResult About()
{
    ViewBag.Message = Session["Data"];

    return View();
}

数据将在用户登录后出现。但是,如果您保持打开浏览器(对于cookie),重新启动开发服务器并刷新页面,则在数据消失时,用户仍然是经过身份验证的。

我知道这种行为并不意外,但我正在寻找一种可靠和集中的方式来强制重定向到登录页面,当会话由于任何其他原因过期或消失时。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-07 12:39:01

将cookie过期设置为与会话超时值相同的持续时间。此外,您还需要确保到期类型(滑动或不滑动)是相同的。使用非滑动到期可能会有更好的结果,以确保他们同时超时。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22910874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档