3

以下のコードのように、アプリケーションで Play フレームワークを使用してセッションを処理しました。

def login = Action {
    { implicit request =>

          val email = request.body.asFormUrlEncoded.get("email")(0)
          val password = request.body.asFormUrlEncoded.get("password")(0)

          loginForm.bindFromRequest.fold(
              errors => BadRequest(html.login(errors,"Please enter valid username password")),
              //contact => Ok(html.login(loginForm,SignUpProcess.login(email,password)))
              contact => Redirect(routes.Application.home).withSession("email" -> email,"password" -> password)
          )
      }
  }

  def index = Action { request =>
    request.session.get("email").map{ user =>
        Redirect(routes.Application.home).withSession("email" -> user)
    }.getOrElse{
         Ok(views.html.login(loginForm,"Enter username password to login"))
    }

  }

セッションのタイムアウトを追加する必要があります。Play のドキュメントでは、

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

タイムスタンプをユーザー セッションに追加し、最大 insctivity 期間を設定する方法は?

4

3 に答える 3

4

conf/application.conf ファイルで構成キーの値を設定して、Play アプリケーションでタイムアウトを構成するには。

application.session.maxAge

セッション タイムアウト、つまりセッション Cookie の最大有効期間。設定されていない場合、Web ブラウザを閉じるとセッションが期限切れになります。たとえば、セッションを 1 時間に設定するには、次のようにします。

application.session.maxAge=1h

セッションを 1 週間記憶します。

application.session.maxAge=7d

デフォルト: セッションは、ブラウザーが閉じられると期限切れになる一時的な Cookie に基づいています。

または次のようなことができます:

ログイン中に、「最後のアクション時間」をセッションの現在の時間に設定します。

Global クラスで、そのフラグが存在する場合は onRequest テストをオーバーライドします

  • そうでない場合、ユーザーにはセッションがありません -> サイレント ログインにリダイレクトします

  • もし、そうなら

    --- 前回が 30 分以上前かどうかをテストします

         ------ if yes, session timeout -> add message to flash, rediect to login   
         ------ if no, update the flag with current time, let the page load
    
于 2013-11-06T10:53:00.823 に答える