会话数据在模板中渲染不正确
当用户进行身份验证时,我将 user.displayName 存储在会话中:
session.put("udn", user.displayName);
并且模板使用以下方式呈现它:
${session.udn}
但奇怪的事情发生了:
- 以“Sam”身份登录,显示“Sam”;
- 注销;
- 以“Jim”身份登录,也显示“Sam”!
- 重新开始比赛;
- 以“Jim”登录,显示“Jim”;
- 注销;
- 以“Sam”身份登录,也显示“Jim”!
也就是说,它始终显示第一个登录用户的显示名称。
在 session.put 之后进行调试:
session.put("udn", user.displayName);
Logger.debug("udn:\t" + session.get("udn"));
它正确打印:
- 以 Sam 身份登录,打印“udn:Sam” ;
- 以 Jim 身份登录,
也打印“udn:Jim”,我检查了 cookie: PLAY_SESSION 包含 %00udn%3A
+ 正确值 + %00
:
- 以 Sam 身份登录,PLAY_SESSION 包含
- 以 Jim 身份登录的
%00udn%3ASam%00
, PLAY_SESSION 包含%00udn%3AJim%00
如何显示正确的值? (我的 Play 应用程序依赖于 Play 1.2.3 和安全模块)
I store user.displayName
in the session, when users authenticate:
session.put("udn", user.displayName);
and the template renders it using:
${session.udn}
but strange things occur:
- login as "Sam", display "Sam";
- logout;
- login as "Jim", display "Sam", too!
- restart play;
- login as "Jim", display "Jim";
- logout;
- login as "Sam", display "Jim", too!
That is, it always display the first logged in user's displayName.
debug just after the session.put:
session.put("udn", user.displayName);
Logger.debug("udn:\t" + session.get("udn"));
it prints correctly:
- login as Sam, prints "udn:Sam";
- login as Jim, prints "udn:Jim"
also, I checked the cookie:
PLAY_SESSION contains %00udn%3A
+ correct value + %00
:
- login as Sam, PLAY_SESSION contains
%00udn%3ASam%00
- login as Jim, PLAY_SESSION contains
%00udn%3AJim%00
How do I display the correct value? (my play app depends on play 1.2.3 & Secure module)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您应该在模板中使用
${session.get("udn")}
。 隐式session
变量只是一个实例play.mvc.Scope.Session;没有任何魔法可以允许像${session.udn}
这样的语法。我不确定为什么会打印任何东西。You should be using
${session.get("udn")}
in your template. The implicitsession
variable is just an instance of play.mvc.Scope.Session; there's no magic in place that would allow syntax like${session.udn}
. I'm not sure why that prints anything at all.