2017-08-30 63 views
1

处理未通过认证的会议推荐的方法我有一个MVC应用程序,与SS集成了具有购物篮功能的所有BLL。我希望匿名用户能够添加到购物篮,然后在退货时继续购物并提供完整的购物篮详细信息 - 所以我觉得在redis中使用sessionid的ss-pid是最好的方法。对ServiceStack

可能有人请确认,如果我处理这个正确的,如果是这样,我该如何实现这个功能? (我无法看到默认情况下使用ss-pid)。

谢谢。因此,当用户不进行身份验证它保留了原有的Cookie

Plugins.Add(new AuthFeature(...) { 
    GenerateNewSessionCookiesOnAuthentication = false 
}); 

,否则你会想:

回答

1

如果你想使用会话cookie来存储未认证用户信息,那么你就需要设置设置并使用您自己的Cookie,这些Cookie在用户登录时不受影响。

SessionBag是一个很好的解决方案,它使用用户会话Cookie为UnAuthenticated用户存储会话数据,例如你可以填充自定义POCO的东西,如:

var unAuthInfo = SessionBag.Get<UnAuthInfo>() ?? new UnAuthInfo(); 
unAuthInfo.CustomInfo = request.CustomInfo; 
SessionBag.Set(unAuthInfo); 

然后,当用户验证,从会话中检索包的信息,并使用OnAuthenticated()事件添加在你键入的自定义UserSession,如:

public class CustomUserSession : AuthUserSession 
{ 
    [DataMember] 
    public string CustomInfo { get; set; } 

    public override void OnAuthenticated(IServiceBase authService, IAuthSession session, 
     IAuthTokens tokens, Dictionary<string, string> authInfo) 
    { 
     var unAuthInfo = authService.GetSessionBag().Get<UnAuthInfo>(); 

     if (unAuthInfo != null) 
      this.CustomInfo = unAuthInfo.CustomInfo; 
    } 
} 
+0

假设我想使用SS会话cookie,有没有办法让匿名用户默认使用ss-pid会话ID? – richardwhatever

+0

@richardwhatever任一更改[β-选择会话Cookie](http://docs.servicestack.net/sessions)至'SS-OPT = perm'或可以用'变种sessionBag迫使它=新SessionFactory.SessionCacheClient(高速缓存,Request.GetPermanentSessionId());' – mythz

+0

当我设置SS-OPT =烫发它似乎没有足够早在初始(新鲜用户,无饼干)请求,并且作为这样的会话中redis的创建与SS-ID。然后响应包含ss-opt = perm,然后在下一个请求中使用ss-pid创建一个新的匿名用户会话,并将ss-id会话保留在缓存中。如何确保新的用户请求立即存储在ss-pid中? – richardwhatever