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.

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....