6

Play の最善のアプローチは何でしょうか。ユーザーを記憶するアプリケーション?唯一可能な解決策は、クライアント側の Cookie を使用することだと思いますよね? しかし、ブラウザがシャットダウンするとすぐに、このセッションは破棄され、次のリクエストに対して無効になりますか? これをどのように解決しましたか?

今のところ、次のuseridように、セッションで (セッションごとに) 暗号化されたものを提供します。

session("userid", user.id);

次に、インターセプターを使用して、必要なときにパラメーターを頻繁に渡すことを避けます。

しかし、どのようにユーザーを記憶するか、または次のリクエストでユーザーを自動的にログインさせるにはどうすればよいでしょうか?

編集: 2016-03-11 一部のブラウザーでは、セッション Cookie が長期間保存される場合があることに注意してください。たとえば、次回のアクセス時に開いているタブを記憶するように Chrome で設定できます。これは、次回ブラウザを開いたときに Play セッション Cookie が復元されることを意味します。

Play 2.4 以降、セッション Cookie maxAge ( で設定する必要がありますapplication.conf) の名前が次のように変更されました。play.http.session.maxAge

4

4 に答える 4

5

ユーザーがブラウザーを閉じたときにセッションがタイムアウトしないようにするsession.maxAgeには、application.conf でパラメーターを使用できます。

例えば:

# Set session maximum age in seconds (4w)
session.maxAge=2419200 
于 2012-11-16T22:51:58.170 に答える
1

Play 2.0 Session Documentationからの引用:

セッションのテクニカル タイムアウトはありません。ユーザーが Web ブラウザーを閉じると期限切れになります。特定のアプリケーションの機能的なタイムアウトが必要な場合は、タイムスタンプをユーザー セッションに保存し、アプリケーションの必要に応じて使用します (たとえば、最大セッション期間、最大非アクティブ期間など)。

セキュリティ上の理由から、最新のブラウザーは終了時に Cookie を無効にします。これは、ハッカーが正当に持っていない資格情報を使用して悪いことを行うことを許可するという理由だけで変更できるものではありません。

通常、そうするのはセキュリティ上のリスクであるため、ユーザーがログインしたままにすることを本当に望んでいるかどうかを再評価します。ただし、ユーザーを引き続きログインさせたい場合は、Cookie ベースではない方法を試す必要があります。現時点では、それがどのようになるかわかりません。

于 2012-04-19T13:13:59.847 に答える
0

を強制しない場合、newSessionまたはユーザーがCookieを削除しない場合でも、ユーザーはログインしている必要があります。

ブラウザが閉じるときにCookieを削除するように設定されているか、外部の副作用に苦しんでいる可能性があります。しかし、ブラウザを閉じた後、Cookieが開発環境(ChromeとFirefoxの両方)で存続することを確認できます。

于 2012-04-19T11:28:07.033 に答える
0

私はこれを試してみましたが、うまくいきました。これは基本的に構成されたアクションです。

def RememberAction(f: Request[AnyContent] => Result): Action[AnyContent] = {
  アクション { リクエスト =>
    if(!request.session.get("email").isDefined && request.cookies.get("remember-email").isDefined) {
      f(request).asInstanceOf[PlainResult].withSession("email" -> request.cookies.get("remember-email").get.value)
    } そうしないと {
      f(リクエスト)
    }
  }
}

次に、このアクションをコントローラーで次のように使用できます。

    def index = RememberAction { 暗黙のリクエスト =>
      OK("ハローワールド!")
    }

于 2012-04-26T18:02:26.910 に答える