ASP.NET MVC2 - 我可以使用会话来存储用户登录状态

时间:2012-02-28 16:23:55

标签: asp.net asp.net-mvc asp.net-mvc-2

我正在使用ASP.NET MVC2,我需要保存用户登录状态,以指示他是否已登录并显示一些私人数据。

我所做的只是在会话Session.Add("UserID", user.ID.ToString());中添加UserID,然后重定向到获取UserID user的{​​{1}}页面,如果存在,则从数据库中提取数据并将其显示给用户

据我所知,会话数据存储在服务器端,所以我首先想到的是使用这种方法是非常安全的。但是我在Chrome中检查了它并创建了某种让我怀疑的cookie。

有人能告诉我这种方法是否安全吗?

3 个答案:

答案 0 :(得分:1)

正在创建的cookie(a)是加密的,(b)不包含实际数据,而是用于检索处理请求的线程的正确会话的会话标识符。这是保存数据的完美合理且安全的方法。我相信默认情况下cookie是HttpOnly(你应该验证这一点),不应该暴露给浏览器中的脚本。如果它不是HttpOnly,你应该将它配置为(使用httpCookies指令) - 最佳实践将指示cookie应该是HttpOnly,除非客户直接使用特别要求。

答案 1 :(得分:0)

ASP .NET MVC通过在会话开始时为客户端提供唯一密钥(会话ID)来维护会话状态,该密钥存储在HTTP cookie中。会话ID在每次请求时发送到服务器。

您可以设置

<system.web>
  <sessionState cookieless="true" />
</system.web>

然后会话ID将在url中传递,这是不太安全的

答案 2 :(得分:0)

您可以输入Cookie。顺便说一句,这完全没问题。例如,使用联合身份验证时,您的SAML(或其他)令牌存储在encripted cookie中。

即使有人拦截你的cookie,他也无法阅读。为防止数据损坏 - 签名。您还可以向其添加cookie所有者URI并对其进行验证。

与tvanfosson的意见相同。只是注意到它=)但无论如何都会发布。