在 ASP.NET MVC 的会话中存储自定义主体的问题

2023-12-14

我遇到了 ASP.NET MVC 的问题,它强制用户在大约 20 分钟不活动后重新登录。

我正在使用表单身份验证,并在配置文件中增加了超时:

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="9999999" />
</authentication>

我还在配置文件中将会话超时设置为:

<sessionState timeout="120"></sessionState>

我基于 Rockford Lhotka 的 CSLA ASP.NET MVC 示例,并在我的 global.asax 中包含以下内容:

    protected void Application_AcquireRequestState(object sender, EventArgs e)
    {
        if (HttpContext.Current.Handler is IRequiresSessionState)
        {
            if (Csla.ApplicationContext.AuthenticationType == "Windows")
                return;
            System.Security.Principal.IPrincipal principal;
            try
            {
                principal = (System.Security.Principal.IPrincipal)
                    HttpContext.Current.Session[MyMembershipProvider.SESSION_KEY];
            }
            catch
            {
                principal = null;
            }
            if (principal == null)
            {
                if (this.User.Identity.IsAuthenticated && this.User.Identity is FormsIdentity)
                {
                    // no principal in session, but ASP.NET token
                    // still valid - so sign out ASP.NET
                    FormsAuthentication.SignOut();
                    this.Response.Redirect(this.Request.Url.PathAndQuery);
                }
                // didn't get a principal from Session, so
                // set it to an unauthenticted PTPrincipal
                BusinessPrincipal.Logout();
            }
            else
            {
                // use the principal from Session
                Csla.ApplicationContext.User = principal;
            }
        }
    }

据我所知,它应该只在 120 分钟不活动后超时……但由于某种原因,它似乎总是在 20 分钟不活动后超时。我知道为什么会发生这种情况,有什么想法吗?

我正在考虑仅转储表单身份验证并通过会话自己处理它,但我担心我会失去 [Authorize] 属性等功能。尽量不要走这条路。

是否可以将我的自定义主体对象存储为 cookie?我只是不想为每个页面或操作都验证/授权用户。

我正在快速脱发! =)


正如您从得到的答案中注意到的那样,将 FormsAuthentication 与 SessionState 混合在一起在很多层面上都是一个坏主意。

如果描述您的自定义主体的信息很小,我建议将其存储在表单票证的 UserData 成员中。这就是它的用途。

然后,您的自定义数据(仅对有效票证有效)将与票证一起存储。

许多问题得到解决,很多代码也被消除。

Here是一个帮助类,可以帮助您处理票证。

注意:实际上,最大 http cookie 大小略低于官方的 4k 限制,加密将其大约减少一半。

如果您可以确保您的票据(包括主要数据)适合

祝你好运。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 ASP.NET MVC 的会话中存储自定义主体的问题 的相关文章

  • 将视频上传/保存到数据库或文件系统

    我以前从未尝试过保存视频 所以我对此了解不多 我知道如果视频很小 我可以转换为字节数组并保存到数据库 但是为了提高效率 我想了解如何将任何上传的视频保存到我的服务器文件中 然后只保存该文件的文件路径我的数据库表中的视频 我完全不知道如何开始
  • MVC4 - ContextDependentView - 是什么意思?

    我刚刚开始使用 MVC4 我看到的第一个操作方法有一些新内容 我查了一下互联网 找不到任何关于此的信息 public ActionResult LogOn return ContextDependentView 有谁知道 ContextDe
  • ASP.NET MVC2:“System.MissingMethodException:没有为此对象定义无参数构造函数。”

    我目前正在尝试修改默认 MVC 项目的注册组件 以适应我的项目 为此 我修改了 RegisterModel Register aspx 和 AccountController 我可以很好地查看寄存器视图 但是当我提交时 我在标题中收到错误
  • 保护 ASP.NET MVC 应用程序中的 ajax 调用的安全

    我有一个基于 ASP NET MVC 的应用程序 它允许根据用户进行不同级别的访问 当前的工作方式是 当用户访问页面时 会根据数据库进行检查以确定用户拥有的权限 然后根据用户拥有的访问级别选择视图 有些用户比其他用户看到更多数据并拥有更多可
  • MVC ASP.NET 或 Razor

    我对 MVC 很陌生 我对 Silver light WPF 和 MVVM 有相当多的了解 但对 MVC 知之甚少 我正在按照 Microsoft 网站上的主要教程进行操作http www asp net mvc tutorials get
  • 标准 Html.DisplayTextFor() 没有 HTML 编码吗?

    我们目前正在处理 ASP NET MVC 项目之一的一些 XSS 问题 我发现两个问题 第一个问题与我们的请求验证模式有关 攻击者现在可以利用此安全漏洞在我们的数据库中删除一些不良内容 第二个问题是我们如何显示此内容 我们使用 Html D
  • 每个其他请求 JWT 验证都会失败,并显示“idx10503 签名验证失败”。令牌没有孩子'

    所以整个 JWT 签名和验证对我来说还是很新鲜的 我现在有一个 C 应用程序 它通过使用 JWT 保护的 API 请求一些信息 奇怪的是 所有其他请求都失败了 所以第一个请求就像一个魅力 我收到了我期望的信息和回复 JWT 验证成功 我在它
  • ASP.NET MVC 防伪造令牌不安全

    在没有 ssl 的情况下向服务器发出请求时 我实际上可以看到 MVC3 框架以纯文本形式生成的验证令牌密钥 该密钥存储在名为 RequestVerificationToken Lw 的 cookie 中 在混合安全环境中 实际上可以在向非
  • AccessViolationException 未处理

    我正在尝试使用史蒂夫 桑德森的博客文章 http blog stevensanderson com 2010 01 28 editing a variable length list aspnet mvc 2 style 为了在我的 ASP
  • asp.net cookie、身份验证和会话超时

    我有一个使用表单身份验证的 asp net 网站 我在会话中保留一些信息 例如用户名 用户 ID 电子邮件等 我通过在身份验证 cookie 上设置较长的到期日期来允许用户保持登录网站的状态 因此 当用户仍处于身份验证状态时 会话过期的情况
  • ASP.NET MVC 路由如何工作?

    我定义了以下路线 public static void RegisterRoutes RouteCollection routes routes IgnoreRoute resource axd pathInfo routes MapRou
  • 实体框架:在运行时更改连接字符串

    假设有一个 ASP NET MVC 应用程序使用 Entity Framework 6 和代码优先方法以及 StructureMap 作为 IoC 它还使用工作单元模式 域类 public class Product public int
  • Zend 框架会话丢失

    我有一个注册表单 当用户注册时 它会将他重定向到他的页面 在 Firefox 和 Chrome 中一切正常 但在 Internet Explorer 中则正常 看起来保存用户信息后 会话就关闭了 并且不会将用户重定向到他的页面 我该如何解决
  • 编译器失败,错误代码-1073741819

    我们遇到以下错误 而且每次都需要重启服务器 The compiler failed with error code 1073741819 此外 ASP Net 工作正常 只有 ASP Net MVC 应用程序无法工作 任何想法 我的错误代码
  • 在 ASP.Net MVC 中的同一视图中分离两个表单

    我已将创建帐户视图和登录视图合并到同一视图中 所以这是一个具有两种表单的视图 但是当我提交时它们会混合在一起 如果我尝试登录并显示错误 Html ValidationSummary 两种形式都会出现错误 我开始将字段重命名为 loginPa
  • Html.BeginForm PUT

    当我在更新项目时使用 Html BeginForm 提交表单时 似乎不可能定义 PUT 它是否正确 是的 这是正确的 浏览器仅支持 GET 和 POST 来发送表单 不过你可以使用 AJAX ajax url action type PUT
  • 为我的网站构建 API 哪个更好:MVC 或 Ado.net 数据服务?

    我有一个用MVC构建的网站 现在我想为这个网站构建一个API 让用户使用这个API来实现不同的网站 Web服务 插件和浏览器扩展 我经历过这个article http weblogs asp net cibrax archive 2010
  • 使用 SimpleMembership 获取用户信息

    仍在尝试使用 MVC4 来掌握新的 SimpleMembership 我更改了模型以包含名字和姓氏 效果很好 我想更改登录时显示的信息 而不是在视图中使用 User Identity Name 我想做类似 User Identity For
  • 读取 ASP.NET 中分块传输编码的 http 请求的正文

    J2ME 客户端正在使用分块传输编码发送 HTTP POST 请求 当 ASP NET 在 IIS6 和 WebDev exe server 中 尝试读取请求时 它将 Content Length 设置为 0 我想这没问题 因为加载请求时
  • 如何向 Azure SQL 的 ASP.NET 成员资格提供程序添加重试逻辑?

    我们在 Azure SQL 数据库上有一个基于 ASP net sqlMembershipProvider 的用户数据库 很明显 开箱即用的 sqlMembershipProvider 4 0 不具备 Azure SQL 连接所需的重试逻辑

随机推荐