Cat*_*lin 4 asp.net asp.net-mvc session
我的Asp.net MVC网站上有一个基本的身份验证系统
[HttpPost]
public ActionResult Login(LoginViewModel model, string returnUrl)
{
WebSecurity.Login(model.UserName, model.Password, persistCookie: false)
return RedirectToAction("Index", "Home");
}
Run Code Online (Sandbox Code Playgroud)
我还有一个UserInfoViewModel班级,我保留一些用户特定的信息,我在不同的页面上使用它.
为了避免UserInfoViewModel每次我需要它时创建,我想将它保存在Session on Login方法中.
public ActionResult Login(LoginViewModel model, string returnUrl)
{
WebSecurity.Login(model.UserName, model.Password, persistCookie: false)
var userInfoViewModel = new UserInfoViewModel();
Session["userInfo"] = userInfoViewModel;
return RedirectToLocal(returnUrl);
}
Run Code Online (Sandbox Code Playgroud)
考虑到我拥有依赖于内部的敏感信息UserInfoViewModel,例如IsSuperuser,将该对象保留在Session中是否安全?它会在用户登录会话到期时到期吗?
解
System.Security.Principal.IIdentity是为此做出的.它保存了您需要的AUTH cookie内部自定义用户信息,因此您不必每次都重新计算它.
谢谢你的回答!
是的,它是安全的,因为会话存储在服务器上.但是如果您决定使用ASP.NET会话,那么您应该考虑另一个问题.如果此会话存储在Web服务器的内存中(默认),则IIS可以随时回收您的应用程序,并且您将丢失此会话数据.另一方面,用户仍将被认证,因为他将被仍将被发送的表单认证cookie跟踪.因此,如果您想使用Sessions,我建议您切换到进程外会话提供程序(例如StateServer或SQLServer).
同样正如@Mikeb在评论部分指出的那样,会话还有另一个非常严重的问题.如果为给定控制器启用了读写模式,则无法并行处理来自同一会话的多个请求.服务器将按顺序阻止和处理它们.例如,考虑来自同一会话的多个AJAX请求.它们都将按顺序阻塞和处理.
| 归档时间: |
|
| 查看次数: |
2405 次 |
| 最近记录: |