2012-06-01 69 views
1

我試圖在Play框架中創建一個新會話,但它似乎並不堅持。.withSession()在Play 2.0中不起作用

獲得OpenID結果後,我想將它們重定向回索引(現在,無論如何),以及它們剛剛收回的OpenID信息。

Redirect(routes.Application.index).withSession(
      "id" -> info.id, 
      "email" -> info.attributes.get("email").getOrElse("[email protected]"), 
      "timestamp" -> (System.currentTimeMillis()/1000L).toString) 

這需要以下功能:

def index = Action { implicit request ⇒ 
    Ok(html.index(request)) 
    } 

然而,隱含的要求,根據Eclipse的,都是空餅乾,和空會話。這裏發生了什麼?

如果有幫助,這就是OpenID的信息來自全功能:

def openIDCallback = Action { implicit request ⇒ 
    AsyncResult(
     OpenID.verifiedId.extend(_.value match { 
     case Redeemed(info) ⇒ { 
      Redirect(routes.Application.index).withSession(
      "id" -> info.id, 
      "email" -> info.attributes.get("email").getOrElse("[email protected]"), 
      "timestamp" -> (System.currentTimeMillis()/1000L).toString) 
     } 
     case Thrown(t) ⇒ { 
      // Here you should look at the error, and give feedback to the user 
      Redirect(routes.Application.index) 
     } 
     })) 
    } 

回答

1

因此很明顯,Eclipse調試器沒有意識到,某些值是懶惰的。它只是說他們是空的。含義,會話看起來即使它沒有被調用一次。

真正的問題是,在應該使用Session的代碼部分,我使用request.cookies.get()而不是request.session.get()。儘管session是一個cookie,但它是一個具有自己的特殊val的命名cookie。因此,我的代碼在另一個地方打破了,原因不同。