asp.net-mvc – 为什么WebSecurity.Logout *不立即*将IPrincipal
首先,重要的是要注意,在我的应用程序中,如果您注销会话仍然有效,并且您不仅会被重定向回登录页面,而是保持在同一页面上.
话虽如此 – 我用这两种方式中的哪一种在MVC应用程序中注销 FormsAuthentication.SignOut() WebSecurity.Logout() 效果是相同的,如果我立即访问它们,以下属性都不会更改以反映注销: User.Identity.Name Thread.CurrentPrincipal.Identity 现在 – 如果我进行重定向,或者只是重新加载页面,那么显然这些属性会更新为空用户.它们并不立即意味着User.Identity.Name表示刚刚注销的用户. 这是一个问题,因为我想生成您在登录/注销后以XXX身份登录的表单文本 – 这可能是在AJAX情况下无法进行重定向. 我很好奇是否有任何方法可以在注销(或登录)后触发IPrincipal重置自身. 我假设人们在Logout()调用之后通常只是Redirect(),所以这绝不是问题,但在AJAX情况下,这并不总是实用的. 我目前的解决方案是在我自己的包装器中抽象身份,因此一旦我注销,我就可以更新它.我只是担心这会产生一些模糊的副作用,特别是如果有人直接访问IPrincipal而不是通过包装器. 解决方法
这是ASP.NET事件管道的核心限制,因为它与表单身份验证有关.这也使其容易受到重播攻击,如
KB article 900111中所述.在该文章中,他们引用了一个解决方案来使用成员资格提供程序来存储有关已登录用户的一些服务器端信息.
会员提供者看起来与您考虑采用的方法非常相似,我想知道您是否应该考虑使用其中一个内置成员资格提供程序,或者将您的自定义代码编写为成员资格提供程序.这应该解决一些人们不了解这种方法并直接调用IPrincipal的问题. 您的“注销但保持在同一页面”会使问题更加突出,但最终您只是发现了每个人都使用ASP.NET的相同基本重播问题(但不是每个人都能解决它). This related question也可能有所帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – Dropdownlist在Page_ClientValidate()之后不回发
- 高性能ASP.NET站点(> 1000请求/秒)
- asp.net-mvc-3 – Razor语法不按我预期的方式工作
- asp.net 文件上传 实时进度
- asp.net – SignalR不能与.Net Core一起使用
- asp.net-mvc – 如何在ASP.NET MVC中创建旋转广告块?
- asp.net-mvc-4 – 在.cshtml文件中设置断点 – VS2013
- asp.net-mvc – ASP.Net MVC输出缓存:指令或配置设置配置文
- asp.net – 如何全局创建CustomPrincipal(使用和不使用Auth
- asp.net-mvc – ASP.NET MVC Validation将类添加到包含div
- asp.net-mvc – OnAction中的读取属性在asp.net
- asp.net – 图像文件正由另一个进程使用
- asp.net – 当页面用鼠标悬停在元素上时,jQuery触
- asp.net-mvc – 动作命名约定
- asp.net-core – 哪些所有类型的HTTP头都在ASP.N
- asp.net-mvc – ASP.NET MVC是否有任何DateTime路
- asp.net – ASPXGridView ClientSideEvents如何获
- asp.net-web-api – 使用Asp.Net Core WebAPI进行
- 获取asp.net中的上一页名称
- asp.net-mvc – 模型和视图模型之间的区别