web-dev-qa-db-ja.com

VSセッションVS Cookieをキャッシュしますか?

Cache VS Session VS Cookiesの長所と短所は何ですか?

例えば:
セッション変数を頻繁に使用しており、ユーザーが製品の注文を開始してから昼食を取り、数時間後に戻って予約を続けると、予約アプリケーションで問題が発生することがあります。ユーザーが予約を確認または中止するまでセッションに予約を保存するので、ユーザーがブラウザーでXをクリックするだけで戻ってこない場合は、データベースと対話してデータベースで途中で予約する必要はありません。

代わりに、キャッシュまたはCookie、またはこれらの組み合わせを使用する必要がありますか?

(アプリに何らかのエラーがある場合、セッションオブジェクトはそれ自体をリセットし、そのためにさらに問題が発生します)

私は主にデスクトッププログラミングを行っており、ここで多くの知識が不足していると感じているので、キャッシュ、セッション、Cookie(またはdb)の使用場所を拡張できる人なら誰でも歓迎します

編集:回答から、DBとCookieの組み合わせが欲しいと思うようです。

  1. セッションIDに接続されたデータベースに予約を保存する必要があります
  2. セッションIDをCookie(暗号化)に保存します。
  3. すべてのページがCookieをチェックしてロードし、データベースから予約を取得します
  4. 未完成の予約をクリアする週に1回実行されるクリーンアップ手順があります。

ユーザーが価格やその他の機密データを変更でき、すべてを検証する必要があったため(データを信頼できないため)、予約をCookieとして保存できません。

私はそれを正しくしましたか?

そして、皆さんにすばらしい説明をありがとう!

61
Stefan

状態管理は、デスクトップアプリケーションの観点からWebの世界に参入する際に習得する重要なものです。

  • Sessionは、server上の現在のWebセッションに関するper-user情報を格納するために使用されます。データベースサーバーをバックエンドストアとして使用することをサポートします。
  • Cookieを使用して、ユーザーごと現在のWebセッションの情報または永続client、したがって、クライアントはCookieのコンテンツを制御できます。
  • Cacheオブジェクトは単一アプリケーションのユーザー間で共有です。その主な目的は、データストアからデータをキャッシュすることであり、プライマリストレージとして使用しないでください。 自動無効化機能をサポートしています。
  • Applicationオブジェクトは、ユーザー間で共有されてアプリケーション全体状態を保存するため、それに応じて使用する必要があります。

アプリケーションが多くの非認証ユーザーによって使用されている場合、データをCookieに保存することをお勧めします。認証が必要な場合は、DBにデータを手動で保存するか、ASP.NETプロファイル管理機能を使用できます。

84
Mehrdad Afshari

Webは本来切断されたモデルであり、言及されたオプション(セッション、アプリケーション、キャッシュなど)のどれも十分に信頼できません。セッションはタイムアウトになり、ワーカープロセスはリサイクルされます。

ユーザーの進捗を確実に長期間保存する必要がある場合、データベースが唯一のソリューションです。ユーザープロファイルがある場合(ユーザーがログインする必要がある場合)、それは簡単です。そうでない場合は、一意のIDを生成し、Cookie(またはURL)に保存し、そのIDに基づいてユーザーを追跡します。

Idが暗号化されていることを確認してから、数値だけでなくbase64でエンコードされた文字列を確認してください。

編集:

Mehrdad Afshariからの元の質問とコメントでの追加説明の後、セッションを使用するが、ストレージをInProcではなくSql Serverに設定するのがよい解決策です。

詳細と設定方法は次のとおりです。 http://msdn.Microsoft.com/en-us/library/ms178586.aspx

セッションタイムアウトはまだありますが、アプリケーションプールのリサイクル、サーバーの再起動でも存続することに注意してください。

本当に永続的なストレージが必要な場合は、最初に説明したように、データベースを使用したカスタムソリューションが唯一のソリューションです。

4
markom

セッションはサーバーに保存され、デフォルトでは20分でタイムアウトします(これは調整可能です)。これをCookieに保存するか、ビューステート(使用可能な場合)に保存して、タイムアウトを防ぎます。

状態がInProc(デフォルトのセットアップ)に保存されている場合、ファーム内に複数のサーバーがあると、ユーザーを同じサーバーに保持する何らかの「スティッキーセッション」を実装しない限り、問題が発生します。後続の呼び出しのためのファーム。

私は可能な限りセッションを回避しようとし(サーバーに余分な負荷とメモリ使用量を置く)、ページサイズを小さく保つために可能な場合はビューステートをオフのままにします。多くの場合、Cookieは最も軽量なオプションですが、ユーザーはこれをオフにしている可能性があり、サイトを使用できるフォールバックモードが必要になります。

編集(askerからの応答に基づいて説明を追加):

Viewstateは非表示フィールドに格納され、Viewstateストレージ内のすべてのオブジェクトのシリアル化された表現です。 Viewstateはページの状態を保存するために自動的に使用されますが、必要に応じてViewstateに独自のオブジェクトを明示的に追加および取得できます。

そのため、はい、データセットはViewstateに保存できます。

2
Chris Ballance

キャッシュはすべてのユーザー間で共有されるため、キャッシュオブジェクトを使用してセッションデータをキャッシュしないでください。代わりに、Asp.Net Profile properties を使用してデータを保存するか、Session_Endイベントにイベントハンドラーを追加して、ユーザーがコンピューターから離れすぎた場合にデータを保存できます。

1
Rune Grimstad

最初に知っておくべきこと! Cookieはセッションで使用されます!サーバーは、リクエストごとにクライアントとサーバー間で交換されるCookieのおかげでユーザーが誰であるかを認識します(これは、HTTPヘッダーのset-cookieおよびcookieで機能します)。

本当の質問は:

  • ナビゲーション中にユーザー情報を保存する場合は、セッションを使用する必要があります。

  • クライアントがCookieをサポートしていない場合、URLにエンコードされたCookieを各リクエスト内に保存することを決定できます(サーバーはCookieの代わりにURLを使用してリクエストに適切なセッションを見つけます)。

セッションを保存する場所を検討します:
サイトで高い責任と高いパフォーマンスが必要な場合、プロセス内ではなくデータベース内にセッションを保存する必要があります。これにより、複数のWebサーバー間で作業を共有できます。ただし、セッションに格納するオブジェクトはシリアル化可能でなければならないため)シンプルさが失われ、Webサーバーとデータベースサーバー間でもう1つのラウンドトリップが発生します。

1
Nicolas Dorier

LocalStorageSessionStorageCookieの間で常に混乱していましたが、それ以上ではありません。

言葉をリンクするだけで、彼らが何をすべきかを自明です。

LocalStorage:ローカルストレージ、それはどういう意味か、テクノロジーについては何も知らないが、それ自体は推測できることです。データをローカルに保存するストレージです。

それが何であるか。

ITはデータをブラウザに保存しますwithout any expiration until user clear it JavaScriptコードまたはブラウザのキャッシュをクリアします。

セッションストレージ:データも保存しているようですが、セッションに関連しているようですが、localStorageとはどう違いますか?

主な違いはsession storage data will be deleted once the session is finish or browser tab is closed or the browser is closed

設定するだけでブラウザコンソールで試すことができます

localStorage.setItem('name' , 'alex')
sessionStorage.setItem('session','seesion value')

タブを閉じて再度開くと、localStorageデータは見つかりますが、sessionStorageデータは見つかりません

Cookie:したがって、これは上記の2つとはまったく異なります。サーバー側の目的で一般的に使用されるCookie。

  • 後続のリクエストでサーバーに送り返す必要があるデータを保存します。
  • 有効期限はタイプによって異なり、有効期限はサーバー側またはクライアント側のいずれかから設定できます(通常はサーバー側から)。
  • Cookieは主にサーバー側の読み取り用であり(クライアント側でも読み取ることができます)、localStorageとsessionStorageはクライアント側でのみ読み取ることができます。
  • サイズは4KB未満でなければなりません。
  • CookieのhttpOnlyフラグをtrueに設定することにより、Cookieを安全にすることができます。これにより、そのCookieへのクライアント側のアクセスが防止されます
0
UniCoder
  • Cookieは、クライアント固有の情報をクライアントのマシンに保存し、後で取得して状態を取得することにより、連携するソフトウェア間で共有される情報です。情報。

  • cookie」という用語を選択しました。「a cookieは、不透明な仲介者が保持するデータ」。ここで、不透明という用語は、コンテンツがサーバーではなくクライアントだけに関心があり、関連性があることを意味します。ブラウザは、Cookieの発信元ホストへの後続のすべてのリクエストにCookieを自動的に含めます。 Cookieには、名前と値、およびドメインとパス、有効期限、バージョン番号、コメントなどの他の属性があります。 詳細

Cookieバージョン:

Cookie: cookie-name=cookie-value; Comment=text; Domain=domain-name; Path=path-name; Max-Age=seconds; Version=1; Secure
  • サーバー側sessionデータには大きなデータとクライアント側cookieウェブサイトからサーバーに送信されるデータのサイズは制限されています。通常、Cookieにはこの保存データ転送サイズによる参照コードが含まれています。ブラウザーが閉じられるとすぐにセッションは閉じますが、Cookieはより長く存在します。ブラウザーは、セッションIDをURLパラメーター、Cookie、またはHTTPヘッダーとしてサーバーに送信します。

  • Cacheは、データを保存するハードウェアまたはソフトウェアコンポーネントであるため、そのデータに対する今後のリクエストをより高速に処理できます。キャッシュに保存されるデータは、以前の計算の結果か、他の場所に保存されたデータの複製である可能性があります。

0
Premraj

Cookiesは、テキストファイル形式としてブラウザに保存されます。データの制限された量が保存されます。4kb [4096bytes]のみが許可されます。クッキー。

cookieの値に簡単にアクセスできるため、安全性が低いですsetcookie()関数はタグの前である必要があります。

セッションはサーバー側に格納されます。無制限の量のデータが格納されます。セッションで複数の変数を保持しています。 Cookieの値に簡単にアクセスすることはできません。したがって、より安全です。

0
Elangovan