2017-03-09 42 views
-1

我用这个来为用户创建一个会话:如何让会话持续更长时间?

put_session(conn, :user_id, user_id) 

但到期相当快,大约一天的时间,我认为。我想要2周左右。我如何指定一个有效的时间范围?

回答

4

默认会话Cookie没有到期日期设置,创建存在until the user closes the browsing session会话cookie。

变化:

plug Plug.Session, 
    store: :cookie, 
    key: "_my_app_key", 
    signing_salt: "..." 

到:

plug Plug.Session, 
    store: :cookie, 
    key: "_my_app_key", 
    signing_salt: "...", 
    max_age: 2 * 7 * 24 * 60 * 60 # number of seconds in 2 weeks 

您可以从您的应用程序检查set-cookie头验证这一点你可以通过max_age: <integer>plug Plug.Session呼叫lib/my_app/endpoint.ex设置一个特定的时间。他们会转离:

$ curl -I localhost:4000 | grep set-cookie 

的Set-Cookie:_my_app_key = SFMyNTY.g3QAAAABbQAAAANmb29GP-MM4khcFDg.V3iUo5xw9HqgCmvRLBvhRguMixOlzZH_pqxRIYVAwdQ;路径= /;仅Http

到:

$ curl -I localhost:4000 | grep set-cookie 

的Set-Cookie:_my_app_key = SFMyNTY.g3QAAAABbQAAAANmb29GP-M66RqWt64.6PvtX96B9jwgyIhjJBX5AiDV9_96838plEpgGxS9u0Q;路径= /;到期= 2017年3月23日(星期四)15:06:48 GMT;最大年龄= 1209600; HttpOnly

+0

其实不,我关闭浏览器,然后打开它,它仍然活着。 – Junidi

+0

@Junidi这是因为,例如,Chrome在重新启动后不会终止会话,您必须更改设置,我相信 – JustMichael

+0

是的,http://stackoverflow.com/questions/10617954/chrome-doesnt-delete-session-cookies 。 – Dogbert

0

您正在将其放入灵活性有限的会话中。你可以创建一个单独的cookie,如一条路可走,并设置其max_age这样的:

put_resp_cookie(conn, :user_id, user_id, max_age: 30 * 24 * 60 * 60) 
+1

因此,每个人都可以编辑自己的cookie并代表其他用户登录? – Junidi

+1

@Junidi这就是如何处理这种情况,处理安全问题不成问题。 – JustMichael