5

Playで最初のウェブサイトに取り組んでいます!フレームワークであり、ある時点で、ユーザーがログインしたときにこのメソッドを呼び出しています。

static void connect(User user){
    session.put("userid", user.id);
}

ユーザーIDをセッションに保存するだけで、リクエストごとに設定されているかどうかを確認でき、正常に機能します。問題は、ブラウザを閉じるとCookieが失われ、ユーザーが再度ログインする必要があることです。「rememberme」オプションを作成したいのですが、それを行う唯一の方法は、Cookieを作成し、次のように応答とともに送信することです。

response.setCookie("user", userdata, "14d");

だから私は、それがまったく同じことをするとき、セッションを作成することのポイントは何ですか?(ただし、Cookieの時間を制御することはできません)。そして、私がまだ見つけていないもう1つのことは、リクエストからCookieを読み取る方法です。

(そして、setCookieで作成されたCookieが暗号化されていないことを認識しているので、呼び出す必要がありますCrypto.sign()

4

5 に答える 5

3

1) セッション開始!は常に Cookie を介して (つまり、クライアント側で) 保持されます。これは、「何も共有しない」アプローチに起因します。

2) Secure モジュールを使用している場合 (または、独自のコードを作成している場合は、コードを見て従うことができます)、「authenticate()」メソッドはパラメーター「remember」を取り、セッションを 30 日間設定します ( response.setCookie("rememberme", Crypto.sign(username) + "-" + username, "30d");)

すなわち。ユーザーが「記憶する」ことを選択しない場合、セッションはブラウザーが閉じられるまでしか持続しません。

3)本当の違いは、あなたが言ったように、 session.put() はセッションタイムアウトを設定できないことです。セッションを延長したい場合は、Cookie に設定します。

4) ユーザーが CRUD を実行している間に追加の認証が必要な場合 (ユーザーが「記憶」することを選択した場合や、セッションが明示的に延長された場合でも)、ユーザー名/ID をキャッシュに設定することをお勧めします (セッションに別の識別子を再度設定するよりも) )、ユーザーのログアウト時にクリアします。memcache のような分散キャッシュを使用することを選択した場合、これは適切にスケーリングされます。

5) Cookie から読み取るにrequest.cookies.get("name")は、便利です。

于 2011-06-19T06:57:19.377 に答える
1

Webアプリに状態を保存するには、クライアント側とサーバー側の2つの方法があります。

サーバー側では、SessionオブジェクトまたはApplicationオブジェクトのいずれかを使用できます。クライアント側では、ビューステート、Cookie、非表示フィールドなどを使用できます。

セッションにはタイムアウト期間があり、その後期限切れになります。Webアプリケーションにアクセスするたびに、一定期間続くセッションが作成されます。したがって、それはユーザーごとのものです。タイムアウト期間を長くしても、ブラウザを閉じると期限切れになります。アプリケーションオブジェクトはすべてのユーザー間で共有されます。

クッキーは、1日以上などの長期間記憶する必要のある情報を保存するためのより良い方法です。あなたはグーグルがあなたが何日もログインしたままでいることを可能にすることに気づいたでしょう。これは、セッションではなく状態管理にCookieを使用しているためです。

于 2011-06-18T20:35:47.693 に答える
0

セッション属性で行ったのとまったく同じポイントで、ユーザー ID を Cookie に保存する必要があります。Cookie の読み取りには HttpServletRequest.getCookies() を使用します。このメソッドは Cookie の配列を返すため、配列を反復処理して関連する Cookie を特定する必要があります。

Cookie を変更するには、上書きするだけです。

于 2011-06-18T20:36:45.880 に答える
0

セッションを使用すると、サーバー側のデータを特定のブラウザー セッションに関連付けることができます。内部では、特定のブラウザーに関連付けられたサーバー側のデータを検索するためにサーバーが使用する Cookie が自動的に作成されます。

セッション Cookie の有効期限の制御は、通常、フレームワークの構成のどこかで行われます (または、アプリ サーバーによって使用される web.xml ファイルで行われる場合もあります)。HttpServletRequestgetCookiesメソッドから Cookie を読み取ることができます。

編集:これgetCookiesドキュメントであり、Play! 永続的なログインと Cookie の取得の例については、 http: //groups.google.com/group/play-framework/msg/6e40b07ff9b49a8aを参照してください。

于 2011-06-18T20:37:23.850 に答える
0

基本的に、セッションは、ユーザーがアプリケーションと対話している時間 + 指定したセッション タイムアウトの間のみ実行可能です。クッキーの有用性は、関連情報をユーザーに保存することです。これにより、ユーザーが再びウェブサイトに戻ったときに、ユーザーをもう一度識別できるようになります。

たとえば、ユーザーに関する機密情報と機密でない情報の両方がある場合、Cookie を介してそのユーザーが誰であるかを判別し、機密でない情報をすべて読み込むことで、アプリケーションをより使いやすくすることができます。それらが自分自身を認証したら、機密情報もロードできます。

MSDN には、 http://msdn.microsoft.com/en-us/library/ms178194.aspxで Cookie の操作方法に関する優れた参考資料があります。

于 2011-06-18T20:37:28.947 に答える