2011-02-16 66 views
16

我想存储一个身份验证令牌与Play Framework超过当前会话,可能几天甚至几周 - 这样用户就不必每次都登录。如何在Play Framework中存储Cookie?

什么是做到这一点的推荐的方法?

+1

请检查答案以关闭该问题。它也会帮助其他人。谢谢:) – 2011-05-09 16:20:05

回答

20

相应对象的方法setCookie方法,这不正是你想要的

response.setCookie("playlonglivecookie", yourData, "14d"); 

请记住,存储在cookie中的数据没有加密,因此如果要加密它,请使用Crypto.sign方法。它使用播放框架密钥为您的代码签名。

http://www.playframework.org/documentation/api/1.1.1/play/mvc/Http.Response.html#setCookie(java.lang.String,%20java.lang.String)

+0

如果您希望它可以在所有子域中共享,您将如何存储cookie?我试图做到这一点,但它不产生一个cookie:response.setCookie(“webLoggedIn”,“true”,“mydomain.org”,“”,2592000,false,false); – HelpMeStackOverflowMyOnlyHope 2016-04-26 03:16:39

0

响应对象有一些方法来帮助你。见javadoc

7

我也建议你去看看在播放的1.x /模块/安全和文件Secure.java提供的安全模块...它的登录表单提供了一个复选框“记住我”,这可以让你保持永恒。

这个功能(特别是在response.setCookie末)的代码:

public static void authenticate(@Required String username, String password, boolean remember) throws Throwable { 
    // Check tokens 
    Boolean allowed = false; 
    try { 
     // This is the deprecated method name 
     allowed = (Boolean)Security.invoke("authentify", username, password); 
    } catch (UnsupportedOperationException e) { 
     // This is the official method name 
     allowed = (Boolean)Security.invoke("authenticate", username, password); 
    } 
    if(validation.hasErrors() || !allowed) { 
     flash.keep("url"); 
     flash.error("secure.error"); 
     params.flash(); 
     login(); 
    } 
    // Mark user as connected 
    session.put("username", username); 
    // Remember if needed 
    if(remember) { 
     response.setCookie("rememberme", Crypto.sign(username) + "-" + username, "30d"); 
    } 
    // Redirect to the original URL (or /) 
    redirectToOriginalURL(); 
} 

帕斯卡尔

1

一起玩> 2.5 setCookie方法已被弃用。

,您可以改用:

Http.Response.setCookie(Http.Cookie cookie) 

您可以创建一个新的cookie与建筑商:

Http.Cookie.builder("name", "value").withMaxAge(15).build(); 

15天的截止日期

参考:https://www.playframework.com/documentation/2.5.x/api/java/play/mvc/Http.Response.html#setCookie-play.mvc.Http.Cookie-

例如: https://github.com/playframework/playframework/blob/master/framework/src/play/src/test/java/play/mvc/CookieBuilderTest.java

相关问题