首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >云应用ASP.Net MVC中的会话维护

云应用ASP.Net MVC中的会话维护
EN

Stack Overflow用户
提问于 2013-11-14 16:03:49
回答 1查看 531关注 0票数 2

我正在用Razor语法在ASP.Net MVC 4上开发一个web应用程序。我必须将其部署到云上,可能是Azure。我对login scheme of MVC感到非常困惑。我们必须在多个schemas上工作,这就是为什么我们不使用ASP.Net提供的membership

我知道会话维护,我在web表单中使用过它,但是会话在云方面有一些严重的问题。

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

EN

回答 1

Stack Overflow用户

发布于 2013-11-14 16:39:40

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

如果您要存储用户名、显示名称、电子邮件地址...我建议使用基于声明的身份验证。Brock写了一篇很棒的入门文章:Replacing forms authentication with WIF’s session authentication module (SAM) to enable claims aware identity

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

代码语言:javascript
复制
    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,它可以包含一个或多个声明,如电子邮件地址等。

代码语言:javascript
复制
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角色内缓存或Windows Azure缓存服务。甚至还有一个会话状态提供程序可以将会话状态存储在缓存中:http://msdn.microsoft.com/en-us/library/windowsazure/gg185668.aspx

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

代码语言:javascript
复制
myCache.Put(user.Id + "_Friends", friendsList);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19972477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档