質問
Webアプリケーションがユーザーにステートフルエクスペリエンスを提供できる3つの方法とは何ですか?
はい、講義からの質問。
解決
実質的に2つのアプローチしかありません:
- 各リクエストの背後にあるユーザーを特定し、このIDをセッションコンテキスト(メモリ、データベース、どこにでも)に関連付けます。そこでセッションIDまたはCookie(IDの目的で)が入力されます。
- クライアントがコンテキストの100%を返すことを管理します(クライアントが使用するURLまたはフォームにコンテキストを埋め込みます。ViewStateはこの方法で動作します(*)。また、Cookieも使用できます)そのようなコンテキストを保存します。
リクエスト間でコンテキストデータが保持される方法、およびユーザーの識別に基づくシステムのIDの提供方法は、上記の2つのアプローチの多くのバリエーションを提供します。例:
- データベース内のコンテキスト、
- メモリ内のコンテキスト
- ファイル内のコンテキスト
- ViewStateで渡されたコンテキスト(*)
- コンテキスト...、
- Cookieに保存されたコンテキスト
- URL /フォームに渡されたSessionIDのID
- CookieからのID
(*)edit:ViewStateはセッションIDを渡すデバイスとしてマークされていましたが、erikkallenが指摘するように、ViewStateのデフォルトの使用はIDではなくコンテキスト情報を渡すことです。
ただし、最終的には、コンテキストがサーバー側に格納されるか、各リクエストでクライアントとの間で往復するかによって決まります。
他のヒント
3つ以上あります。
- セッション状態
- ビュー状態
- Cookie
- データベース
- キャッシュ
- ファイルへのデータの書き込み
基本的に、Webリクエスト全体でデータを保持するために使用できるものはすべて、状態の保存に使用できます。
宿題の質問のように見えます。とにかく、あいまいです。ユーザーを追跡する方法は?ユーザーのデータを保存する方法は?
追跡は、Cookie、URLトークン、または非表示フィールド(フォームの場合)を使用して実行できます。
データの保存は、さまざまな方法で実行できます。
最も一般的なシナリオは、セッションIDをCookieに保存し、そのIDを使用してユーザーのセッションを取得することです。
AJAXは、ステートレスWebアプリケーションをステートフルとして表示するための3番目のピースです。
まだ舞台裏でリクエストを送信していますが、ユーザーには画面が更新されず、Webサイトのように見えません。
データベース駆動型のWebサイトを作成できますが、ステートフルにはなりません。
クエリ文字列は、これを行う最も一般的な方法の1つです。例:
http://www.site.com/products /index.aspx?productId=3&page=2&showInactive=n