Gui*_*ini 22 asp.net-mvc session forms-authentication
我在我的应用程序上使用ASP.NET MVC和Forms Authentication.基本上我 FormsAuthentication.SetAuthCookie用来登录和FormsAuthentication.SignOut注销.
在HttpContext.Current.User.Identity中我存储了用户名,但我需要有关已登录用户的更多信息.我不想将我的整个User obj存储在Session中,因为它可能很大并且信息比我需要的多得多.
您是否认为创建类似于LoggedUserInfo仅使用我需要的属性调用的类然后将其添加到Session中是一个好主意variable?这是一个好方法吗?
或者你有更好的想法?
我使用这个解决方案:
ASP.NET 2.0 Forms身份验证 - 保持自定义而简单
总结一下:我创建了自己的IPrincipal实现.它存储在HttpContext.Current.Cache中.如果它以某种方式丢失,我有来自客户端授权cookie的用户名并且可以重建它.此解决方案不依赖于Session,后者很容易丢失.
编辑
如果您想在控制器中使用您的主体并使其可测试,您可以这样做:
private MyPrincipal _myPrincipal;
MyPrincipal MyPrincipal
{
get
{
if (_myPrincipal == null)
return (MyPrincipal)User;
return _myPrincipal;
}
set
{
_myPrincipal = value;
}
}
Run Code Online (Sandbox Code Playgroud)
在测试中,您将设置准备进行测试的对象.否则它将从HttpContext中获取.现在我开始思考,为什么我要用Ninject来做呢?
好吧,你必须将这些存储在某个地方。不过有两个主要可能的地方:
您可以将它们放入 Session 中。我建议您创建一个单独的类,仅保存您实际需要的数据,以避免浪费太多内存。或者,您也可以存储到缓存中,当存在大量并发用户时,最终可能会产生许多数据库调用。
在这种情况下,如果您可以使用单独的类限制数据量,并使用任何方式对其进行序列化并将其发送到客户端。无论是在 cookie 中还是在 URI 中(如果长度允许并且禁用 cookie)...
这些想法的结果:
如果您通过这种方式获得了很多内存资源,那么这里的主要内容是创建一个单独的类。所以这是你应该做的第一件事。
| 归档时间: |
|
| 查看次数: |
28340 次 |
| 最近记录: |