gpt4 book ai didi

ASP.NET MVC4 session 状态存储用户名

转载 作者:行者123 更新时间:2023-12-02 14:03:29 25 4
gpt4 key购买 nike

我用 MVC4 创建了我的第一个 super 小型 Web 应用程序。到目前为止,我使用了布局内容来布局 Web 应用程序,并添加了一些 View Controller 和模型来注册并允许用户登录。

用户登录/注册后,我将其用户名存储在 session 中。我从 session 中读取此属性来确定用户是否已登录。

这是一个不好的做法吗?我读了很多有关 RESTful 和无状态 Web 应用程序的内容。我有点感觉我不应该在 session 中保存任何内容。

例如

@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>
}

问题1:这是一种不好的做法吗?

问题2:这个“黑客安全”吗?那么,破解当前 session 并在 Session["User"] 中存储值以绕过登录是否很容易?

最佳答案

回答您的问题:

1) 一般来说,使用 session 状态并不是一个坏习惯,只要您的应用程序需要它并且您了解它对性能和可扩展性的影响。但是,在您的情况下,如果您需要存储的只是用户名,那么您确实不需要它,如果您的应用程序使用 ASP.Net 成员资格提供程序,则此信息可在 MVCController 的 User 属性中找到基类:

var username = User.Identity.Name

session 数据可以通过三种方式存储:“InProc”,将其存储在应用程序进程中;“StateServer”,将其存储在单独服务器上的输出进程中;以及“SQLServer”,将其存储在应用程序进程中。存储在 SQL Server 数据库中。您应该使用哪一个取决于您是否使用服务器场、您的 session 是否需要持久(即在计算机重新启动后继续存在)以及您的应用程序的性能要求(StateServer 和 SQLServer 的性能低于 InProc)。更多信息可查询here

2) 您应该使用 SSL 来保护您的 session 数据。通过 SSL (HTTPS) 发送的数据是完全加密的,包括 header (因此是 cookie)。关于如何防止 session 劫持攻击的一个很好的讨论是found here.

关于ASP.NET MVC4 session 状态存储用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14072817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com