ASP.NET MVC4会话状态存储用户名
我用MVC4创建了我的第一个超级小型webapp.到目前为止,我使用布局的东西来布局webapp并添加了一些视图控制器和一个模型来注册并允许用户登录.
用户登录/注册后,我将其用户名存储在会话中.我从会话中读取此属性以确定用户是否已登录. 这是一种不好的做法吗?我读了很多关于RESTful和无状态webapps的内容.我觉得我不应该在会话中保存任何东西. 例如 @if (string.IsNullOrEmpty(Session["User"] as string)) { <dl> <dt><a href="/Account/Register">Register</a></dt> <dt><a href="/Account/Login">Login</a></dt> </dl> } else { <dl> <dt><a href="/Account/ShowAccount/@Session["User"]">@Session["User"]</a></dt> <dt><a href="/Account/Logout">Log out</a></dt> </dl> } Q1:这是一个不好的做法吗? Q2:这是“黑客安全”吗?这样,是否容易破解当前会话并在Session [“User”]中存储值以绕过登录? 解决方法
回答你的问题:
1)一般来说,使用会话状态并不是一种不好的做法,只要您需要它用于您的应用程序并且您了解它对性能和可伸缩性的影响.但是,在您的情况下,如果您需要存储的只是用户的名称,那么您真的不需要它,如果您的应用程序使用的是ASP.Net成员资格提供程序,那么此信息可在MVCController的User属性中找到基类: var username = User.Identity.Name 可以存储会话数据的三种方式:“InProc”,它存储在应用程序进程中,“StateServer”,它存储在单独服务器上的输出进程,以及“SQLServer”,它存储在一个单独的服务器上SQL Server数据库.您应该使用哪一个取决于您是否正在使用服务器场,如果您的会话需要持久(即在机器重启后仍然存在),以及您的应用程序的性能要求是什么(StateServer和SQLServer的性能不如InProc).更多信息可以在here找到 2)您应该使用SSL来保护会话数据.通过SSL(HTTPS)发送的数据是完全加密的,包括标头(因此是cookie).关于如何防止会话劫持攻击的一个很好的讨论是found here. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – MVC3中的Url.RouteUrl()和Url.Action()之间
- asp.net-mvc – 无法更新数据库以匹配当前模型,因为存在挂起
- asp.net – 当页面用鼠标悬停在元素上时,jQuery触发鼠标悬停
- C#_.NetCore_Web项目_EXCEL数据导出(ExcelHelper_第一版)
- asp.net – 单元测试Web服务 – HttpContext
- asp.net – 为什么不能在发布模式下构建网站?
- asp.net – 在部分视图中强制使用没有Html.BeginForm / Aja
- 使用Bitbucket Pipeline进行.Net Core项目的自动构建、测试
- asp.net-web-api – 当启用CORS时,ASP.NET Web API中的异常
- asp.net-web-api – 在ODataConventionModelBuilder中设置数
- asp.net-mvc-3 – 如何将模型传递给MVC 3 Razor“
- asp.net-mvc – 关于使用重写的AuthorizeAttribu
- asp.net-mvc – MVC查看可空的日期字段格式
- asp.net-web-api – 微服务与多层架构
- ASP.NET MVC与Webforms:替换WebForms控件
- asp.net – GridView编辑按钮需要2次点击
- asp.net – 在.NET应用程序上使用Phantom JS生成
- ASP.NET MVC下自定义错误页和展示错误页的方式
- asp.net – 定期向用户发送电子邮件以进行密码更
- asp.net-mvc – 在MVC 3 RC中实现TransferResult