2009-10-30 24 views
11

セッション全体をクッキーに格納することは、過去数年間、Railsの標準となっています。ASP MVCと同様の方法を簡単に実現する方法はありますか?Cookieを使用してASPにセッションを保存するMVC

デフォルトでは、Session/TempData内のすべてのものがサーバー上のメモリに格納されます。 web.configでは、これをSQLストア/サーバーサイドのキャッシュに変更できます。私は、これらのオブジェクトをクッキーに永続化させたいと思っています。

カスタムセッションステートストアプロバイダを実装できるようです。より簡単なアプローチはありますか?

+1

「セッション全体をクッキー」と入力したのですか? – codeulike

+0

はい - ありがとうございます –

答えて

4

はい、custom state session-providerを実装してください。そして、いいえ、簡単なアプローチではありません。

ps。それは見えるほど悪くない、すなわち、odbc sampleの半分がdbに書き込んでいます。

+0

これをフォローアップして、カスタム状態のセッションプロバイダを実装しました。それは確かに簡単でした。 ありがとうございます。 –

-2

あなただけの店の文字列にしたい場合は、次のコードが行います、あなたがクッキーに格納するデータの種類によって異なります。あなたはこのためにセッションを使用しないでください

HttpCookie cookie = new HttpCookie("username","sth"); 
      cookie.HttpOnly = true; 
      cookie.Expires = DateTime.Now.AddMonths(3); 
      HttpContext.Current.Response.Cookies.Add(cookie); 
-1

が、プロファイル代わりに。プロファイルは、コンピュータをプロファイルなどに一致させるためにクッキーを使用します。プロファイルキーはクッキーに保存され、ブラウザなどを閉じるときに失われません。

ここに情報があります。 http://odetocode.com/articles/440.aspx

2

セッション全体をCookieに格納することを強くお勧めします。パフォーマンスに悪影響を及ぼします。これを考慮してください:すべてのリソースへのすべての要求には、1回または2回だけ必要な失効したデータのオーバーヘッドが含まれます。最終的にこのオーバーヘッドはユーザー、帯域幅、サイトのパフォーマンスに影響を与えます。ここで

は例です:

GET/HTTP/1.1 
Host: localhost 
OtherUsefulHeaders: foo 
Cookie: YourSessionState=... 

初期要求サイズは約200バイトです。たとえば、セッションに約100バイトを追加するとします。サイズは300バイト、オーバーヘッドは〜30%です。別の100バイトを追加し、オーバーヘッドは50%です。つまり、おおよそ2倍の時間と2倍の帯域幅を要求します。

フットプリントがはるかに小さく、実際には意味があるため、cookie-based TempData implementationを調べてください。

+1

(クッキーストアを通じて実装された)TempDataによるセッション情報の維持は、どんなに高速ですか? TempDataを維持するための追加のコードオーバーヘッドもあります。 セッションはかなり軽量でなければなりません。私たちの場合は数十バイトです。したがって、要求のオーバーヘッドは最小限に抑える必要があります。 2007年にRailsでCookieベースのセッションストアが標準として採用されました。この記事では、その理由を説明します。 http://ryandaigle.com/articles/2007/2/21/what-s-new-in-edge-rails-cookie-based-sessions –

+1

私はRailsコミュニティにとって非常に満足していますが、私のポイントは統計データに基づいています:http://yuiblog.com/blog/2007/03/01/performance-research-part-3/ TempDataは、オーバーヘッドがページラウンドトリップ中に1回だけ適用されるという点で、セッションに比べて有利です。さもなければクッキーはきれいであるべきです とにかく、Webファームシナリオでの苦い経験の後、私はSessionをまったく使用しません。それは価値がありません。 – DreamSonic

+0

どのような方法で現在セッション状態を使用していますか?私はセッションオブジェクト(inprocであろうとなかろうと)やクッキーが唯一の選択肢だと思っただろうか? – UpTheCreek

5

セッションID(ハッシュなど)をクッキーに格納し、そのIDを使用してメモリ/データベース/任意のストレージからセッションデータを取得する方がはるかに効率的だと思います。完全なセッション状態をクッキーに保持することは、帯域幅を必然的に増加させます。

また、Cookieに認証情報やその他の機密データが含まれていて慎重でない場合は、ユーザーが簡単にハッキングして特権を取得したり、アプリケーションを混乱させる可能性があります(データの暗号化暗号化されたデータをベース64でエンコードする必要があるため、帯域幅と処理時間がさらに浪費されるためです)。 決してユーザーからの信頼入力が必要です。

+0

この場合、カスタムセッションステートストアが必要か、web.configでセッションを無効にするのは意味がありますか? –

関連する問題