2016-10-21 16 views
4

ServiceStackは、デフォルトのCookie名 "SS-ID" "SS-PID" と "SessionFeature.csどのように私は

で定義されたSS-OPT" を持っているservicestackにデフォルトセッションクッキー名を変更することができますがする方法はありますデフォルトの名前を別の名前に変更しますか?

HostConfigの構成コードは、それを参照していないようです。

ヒント/参考になります。

答えて

4

SessionFeature.csコードに記載されているように、クッキー名はconstと定義されており、ユーザーが設定することはできません。

しかし、フィルタを使用して、Cookie名を要求と応答に適したものに変更できます。設定方法に追加:

const string mySessionIdentifier = "mySessionId"; 

// Converts incoming requests with "mySessionId" cookie to "ss-id" 
PreRequestFilters.Add((IRequest httpReq, IResponse httpRes) => 
{ 
    var cookie = httpReq.Cookies[mySessionIdentifier]; 
    if (cookie != null) 
    { 
     httpReq.Cookies.Remove(mySessionIdentifier); 
     httpReq.Cookies.Add(ServiceStack.Keywords.SessionId, cookie); 
    } 
} 


// Converts responses with outgoing cookie "ss-id" to "mySessionId" 
GlobalResponseFilters.Add((IRequest httpReq, IResponse httpRes, object dto) => { 
    var cookies = httpRes.CookiesAsDictionary(); 
    string cookie; 
    if (cookies.TryGetValue(ServiceStack.Keywords.SessionId, out cookie)) 
    { 
     httpRes.DeleteCookie(ServiceStack.Keywords.SessionId); 
     httpRes.SetCookie(new Cookie(mySessionIdentifier, cookie)); 
    } 
}); 

suggest hereこれは設定可能です。

+0

これは静的な非constプロパティになるパフォーマンス上のペナルティにつながりますか? –

+0

@joelharkes私はあなたが 'SessionFeature.cs'の' SessionId'について話していると仮定しています:誰もそれを構成可能にするケースを誰も出していないので、単に 'const'だと思います。ですから、私は 'static'プロパティに簡単に変更でき、パフォーマンスペナルティなしでユーザーが設定できると思います。クッキーIDがクライアントに焼き付けられた場所と、更新が必要なServerSendEvents機能の2つの場所がありますが、提案が出された場合、この種の変更は通常迅速に行われます。 – Scott

+0

私はそれを構成可能にする最良のケースはセキュリティだと思います。クッキー名はサービススタックのバックエンドを示す可能性があります。これにより、ハッカーがシステムを対象とすることが容易になります。 –

1

さらに設定可能なCookie名の場合は、domain.comにMVCサイト、api.domain.comにapiと言うことがあります。両方で(しかし別のログインで)servicestackのセッション機能を利用すると、ss-idなどのクッキーは2つのサイトでお互いに戦います。これはIEとEdgeでは、ドメインとサブドメインのCookieは常に共有されますが、ChromeではCookieは別々のままです。

私たちはまさにこの設定を持っています - domain.comのMVCサイトと、私たちのアプリのバリエーションのためのapiをホストする様々なサブドメイン。誰かがChromeではなくIEを使用するとすぐに、これはMVCサイトとサブドメインの間で別々のCookieを壊しました。

残念ながら、上記のフィルタソリューションは、サービス戦略のMVC統合では機能しません。私たちがdomain.comからwww.domain.comに切り替えるのは遅すぎるので、現在MVCサイトでservicestackのセッションストレージを利用できません。

私は機能の変更をリクエストしました。