2017-08-30 4 views
1

私はショッピングバスケット機能を持つすべてのBLLにSSを統合したMVCアプリを持っています。私は匿名のユーザーがバスケットに追加して、彼らが戻ってきたときのバスケットの詳細をそのまま買い物を続けることができるようにしたい - 私はredisのsessionIdをss-pidで使うのが最善のアプローチだと感じている。ServiceStackで認証されていないセッションを処理するための推奨アプローチ

私はこの権利に取り組んでいるかどうかを確認してください。もしそうなら、この機能を有効にするにはどうすればよいですか? (私はとにかくデフォルトでss-pidを使うことはできません)。

ありがとうございました。

答えて

1

あなたが認証されていないユーザー情報を格納するためのセッションクッキーを使用する場合は、あなたが設定したいと思う:ユーザーは、それが既存のCookieを保存し認証しない場合

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

をそうは、そうでない場合は、あなたがしたいと思いますユーザーがログインしたときに影響を受けない独自のCookieを設定して使用します。

SessionBagは、ユーザーセッションCookieを使用してUnAuthenticatedユーザーあなたのような何かをカスタムPOCOを移入することができます。ユーザーを認証は、セッションバッグから情報を取得し、OnAuthenticated()イベントを使用して、型指定されたカスタムUserSessionにそれを追加したときに

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

例:

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を使用すると仮定すると、anonユーザーにデフォルトでss-pidセッションIDを使用させる方法はありますか? – richardwhatever

+0

@richard何[ss-optセッションCookie](http://docs.servicestack.net/sessions)を 'ss-opt = perm'に変更するか、' var sessionBag = new SessionFactory.SessionCacheClient(Cache 、Request.GetPermanentSessionId()); ' – mythz

+0

ss-opt = permを設定すると、最初の(フレッシュなユーザー、クッキーなし)リクエストでは十分早くないように見えるので、セッションはredisで作成されます。 ss-id。応答にはss-opt = permが含まれています。次に、次回の要求でss-pidを使用して新しいanonユーザーセッションが作成され、ss-idセッションはキャッシュに冗長なままになります。新鮮なユーザー要求がss-pidにすぐに保存されるようにするにはどうすればよいですか? – richardwhatever

関連する問題