2017-08-30 104 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