2

我正在ASP.Net MVC 4使用剃刀语法开发一个 Web 应用程序。我必须将它部署在云上,可能在 Azure 上。我对login scheme of MVC. 我们必须在多个方面工作,schemas这就是为什么我们不使用membershipASP.Net 提供的。

我知道会话维护,我在 Web 表单中使用它,但会话在云方面存在一些严重问题。

保存用户名和会话数据的最佳方法是什么?

4

1 回答 1

2

我会避免使用会话状态来存储用户信息甚至会话数据,因为这会降低您的应用程序的可扩展性。

如果你想存储用户名、显示名、电子邮件地址……我建议基于声明的身份验证。Brock Allen 写了一篇很棒的介绍文章来帮助您入门:用 WIF 的会话身份验证模块 (SAM) 替换表单身份验证以启用声明感知身份

主要思想是您分发一个 cookie(就像使用表单身份验证一样):

    Claim[] claims = LoadClaimsForUser(username);
    var id = new ClaimsIdentity(claims, "Forms");
    var cp = new ClaimsPrincipal(id);

    var token = new SessionSecurityToken(cp);
    var sam = FederatedAuthentication.SessionAuthenticationModule;
    sam.WriteSessionTokenToCookie(token);

这个cookie代表一个ClaimIdentity,它可以包含一个或多个声明,如电子邮件地址等......

private Claim[] LoadClaimsForUser(string username) {
    var claims = new Claim[]
    {
        new Claim(ClaimTypes.Name, username),
        new Claim(ClaimTypes.Email, "username@company.com"),
        new Claim(ClaimTypes.Role, "RoleA"),
        new Claim(ClaimTypes.Role, "RoleB"),
        new Claim(OfficeLocationClaimType, "5W-A1"),
    };
    return claims; }

在会话数据方面,您可能需要考虑 Windows Azure In-Role Caching 或 Windows Azure Caching Service。甚至还有一个会话状态提供程序可以将会话状态存储在缓存中:http: //msdn.microsoft.com/en-us/library/windowsazure/gg185668.aspx

但是您可以通过使用缓存键轻松地自己完成此操作,而无需使用会话状态,如下所示:

myCache.Put(user.Id + "_Friends", friendsList);
于 2013-11-14T08:39:40.297 回答