session - 如何使 Wicket session 失效

标签 session wicket invalidation

我有一个 Wicket (6.9.0) 应用程序,它在几个页面上接受用户输入,处理数据,最后显示一个提供输入摘要的页面。应用程序在 session 中存储一些数据,因此我希望最终使其无效,以便用户无法返回并继续使用过时的 session 数据。

我尝试在我的摘要页面中使用 session.invalidate(),首先在构造函数中,然后在 onAfterRender() 中,但两次我最终都看到“页面已过期”页面,而不是摘要页面的输出。

有没有办法显示我的摘要页面,然后使我的 session 无效?或者这是不应该在 Wicket 中完成的事情?

最佳答案

“页面过期”问题是由框架的渲染策略引起的。默认情况下,Wicket 使用“post-after-redirect”策略来呈现页面。因此,如果 session 在页面中的某个位置失效,则以下 get-request 将始终显示“页面已过期”消息,因为 session 不再存在。

简单的解决方案是更改应用程序 init 方法中的渲染策略:

@Override
protected void init() {
   super.init();
   getRequestCycleSettings().setRenderStrategy(RenderStrategy.ONE_PASS_RENDER);
}

此解决方案的缺点是,当用户按下浏览器上的刷新按钮时,它会遇到“双重提交问题”。

关于session - 如何使 Wicket session 失效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17474300/

相关文章:

java - 如何将 Wicket FormComponentPanel 的标记放入 wicket :fragment? 内

c++ - std::为无序集(或映射)插入迭代器?

java - 如何删除失效监听器

php - MySQL/PHP登录系统更改数据库用户?

session - 为什么关闭浏览器后cookies不会过期?

php - session id如何找到当前用户id

ruby-on-rails - rails :"session contains objects whose class definition isn\' t 可用。”

java - 帮助选择基于java组件的Web框架

html - Wicket 表格无法加载/渲染

android - 从 onDraw() 调用 invalidate() 会导致堆栈溢出吗?