我正在开发一个 Asp.net(MVC,但这并不重要)应用程序。我有一个自定义 IHttpModule 负责 PostAuthenticateRequest 更改用户主体和身份。
用户登录时,我将 UserID 和 UserName 存储在身份验证 cookie 中。我有一个 IUser(由 DAO 和业务对象层实现,每个都有自己的附加成员),我需要整个业务服务类。当用户想要任何东西时,我必须提供 IUser 对象实例(通常来自业务对象层),因此提供身份验证票证的 ID 是不够的。
所以我正在考虑如何以及在哪里最好地持久登录用户的 IUser 数据?
- 我不想每次都从数据库中获取它(基于身份验证票的 UserID 数据)
- 我无法将它存储在 Session 中,因为我必须在 PostAuthenticateRequest 中工作,其中 Session 尚未准备好
- 我希望将所有功能封装在我的自定义 IHttpModule 中
我看到的选择:
- 缓存
- 曲奇饼
- (会话) - 通过从 PostAuthenticateRequest 移动到 PostAcquireRequestState 事件并在那里更改主体/身份,但我想避免这种情况
似乎使事情复杂化的过程是:
- 用户登录,从数据库中获取用户数据并以某种方式持久化以供以后请求
- 用户注销,用户数据必须自动从持久媒体中删除
- 用户更改自己的个人资料,必须丢弃用户数据并在下一次来自数据库的请求时重新读取
我不希望所有这些都由 HttpModule(如果可能)自动处理,以消除开发人员忘记重置这些东西的错误。
我也不想要的是写/读一些硬编码的变量/键并在应用程序的其他部分操作它们。这只会带来技术债务。
问题
- 你有什么建议?
- SO如何在请求之间保留用户数据?