質問

セッション全体をCookieに保存することは、ここ数年Railsの標準でした-ASP MVCで同様のことを達成する簡単な方法はありますか?

デフォルトでは、Session / TempDataのすべてのものがサーバーのメモリに保存されます。 web.configでは、これをSQLストア/サーバー側キャッシュに変更できます。これらのオブジェクトをCookieに保持できるようにしたいです。

カスタムSession-State Store Providerを実装できるようです。より簡単なアプローチはありますか?

役に立ちましたか?

解決

はい、カスタムステートセッションプロバイダーを実装します。いいえ、簡単なアプローチはありません。

見た目ほど悪くない、つまり> odbcサンプルの半分がdbに書き込んでいます。

他のヒント

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

また、セキュリティを念頭に置いてください:Cookieに認証情報またはその他の機密データが含まれていて注意しない場合、ユーザーが簡単にハッキングして特権を取得したり、アプリケーションを混乱させたりする可能性があります(データの暗号化も吸う、暗号化されたデータをbase-64でエンコードする必要があるため、帯域幅と処理時間がさらに無駄になります)。ユーザーからの入力を信頼しないでください

セッション全体をクッキーに保存することは強くお勧めしません。パフォーマンスに悪い影響があります。これを考慮してください:(すべてのリソースへの)すべてのリクエストには、1回か2回だけ必要な古いデータのオーバーヘッドが含まれます。最終的に、このオーバーヘッドはユーザー、帯域幅、サイトのパフォーマンスに影響を与えます。

例を次に示します。

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

初期リクエストサイズは約200バイトです。たとえば、セッションに約100バイトを追加するとします。現在、サイズは300バイトで、オーバーヘッドは約30%です。さらに100バイトを追加すると、オーバーヘッドは50%です。つまり、リクエストを送信するのにおよそ2倍の時間と2倍の帯域幅が必要です。

CookieベースのTempData実装。フットプリントがはるかに小さく、実際に意味があります。

(セッション全体ではなく)Cookieに TempData を保存することをお勧めします。

TempData をCookieに保存するには、 ITempDataProvider をオーバーライドし、独自のカスタムプロバイダーを実装する必要があります。

実際には、利用可能なnugetパッケージがあります(このカスタム実装は自動的に行われます): BrockAllen.CookieTempData およびこちらのドキュメント。このパッケージの良い点は、 TempData を圧縮および暗号化することです。したがって、インターネット経由でプレーンテキストを送信することを心配する必要はありません。

する必要があるのは、nugetパッケージをインストールし、 ControllerBase クラスの CreateTempDataProvider をオーバーライドすることだけです。

using BrockAllen.CookieTempData;

namespace myProject.web.Controllers
{
    public class ControllerBase : Controller
    {
        // use CookieTempDataProvider instead of default provider
        protected override ITempDataProvider CreateTempDataProvider()
        {
            return new CookieTempDataProvider();
        }
    }
}

これにはセッションを使用しないでください。代わりにプロファイルを使用してください。プロファイルはCookieを使用してコンピューターをプロファイルなどに一致させます。プロファイルキーはCookieに保存され、ブラウザーなどを閉じても失われません。

情報はこちら。 http://odetocode.com/articles/440.aspx

Cookieに保存するデータの種類によって異なります。文字列のみを保存する場合は、次のコードを実行します。

HttpCookie cookie = new HttpCookie("username","sth");
            cookie.HttpOnly = true;
            cookie.Expires = DateTime.Now.AddMonths(3);
            HttpContext.Current.Response.Cookies.Add(cookie);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top