HttpContext.Current.User对无状态会话安全吗?

时间:2013-01-28 21:56:49

标签: c# session azure azure-web-roles

我使用Azure网站已有几个月了,我决定出于SSL原因迁移到云服务。因为,我的项目中可能需要几个Web角色,我的会话管理需要是无状态的。

这就是我处理项目中用户数据的方式。如果我需要用户相关数据,我会通过HttpContext.Current.User.Identity.Name获取用户名。使用此信息,我查询我的数据库以获取有关我的用户的信息。

这是正确的方法吗?我进行了一些研究,但找不到关于HttpContext.Current.User来自何处的真实信息。

到目前为止,这是我所理解的。用户使用Forms Authentication进行身份验证,在用户PC中创建cookie。当用户再次请求服务器时,服务器会检查cookie信息并使用它来填充HttpContext对象。如果下一个其他Web角色之一接受了请求,它是否可以使用该cookie来填充HttpContext? (这可能是错的,因为我说这是我从网络上的文档和其他答案中理解的)

这就是我基本上要理解的内容。我希望我能够清楚地解释我的问题。让我知道如果不清楚。

2 个答案:

答案 0 :(得分:2)

我在运行多个Web角色的Azure应用程序中使用HttpContext.Current.User.Identity,且SessionState已禁用,没有任何问题。我已将其设置为使用Cookie。

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogIn" cookieless="UseCookies" timeout="2880" />
</authentication>

答案 1 :(得分:2)

我认为你的理解是正确的。当我们使用FormAuthentication时,登录后会生成一个cookie,其中包含用户信息和令牌加密等内容。然后我们请求另一个页面,浏览器会将此cookie发送到服务器,ASP.NET将解密cookie,验证并将用户信息填充到HttpContext.Current.User中,无论您的服务器端有多少个实例。所以我认为在具有多实例的Web角色中使用HttpContext.Current.User是安全的。