当前位置: 首页 > 知识库问答 >
问题:

SpringMVC:如何删除会话属性?

谭健柏
2023-03-14

下面是使用@Session属性的示例。向导完成后,如何清除用户会话属性?在我的示例中,在返回/wizard0之后会话属性仍然存在。我尝试了status.set完成()session.remove属性(用户),但它不起作用。

@Controller
@SessionAttributes("user")
public class UserWizard {

    @RequestMapping(value = "/wizard0", method = RequestMethod.GET)
    public String page1(Model model) {
        if(!model.containsAttribute("user")) {
            model.addAttribute("user", new User());
        }
        return "wizard/page1";
    }

    @RequestMapping(value = "/wizard1", method = RequestMethod.GET)
    public String page2(@ModelAttribute User user) {
        user.setFirstname(Utils.randomString());
        return "wizard/page2";
    }

    @RequestMapping(value = "/wizard2", method = RequestMethod.GET)
    public String page3(@ModelAttribute User user) {
        user.setLastname(Utils.randomString());
        return "wizard/page3";
    }

    @RequestMapping(value = "/finish", method = RequestMethod.GET)
    public String page4(@ModelAttribute User user, HttpSession session, SessionStatus status) {
        /**
         * store User ...
         */
        status.setComplete();
        session.removeAttribute("user");
        return "redirect:/home";
    }

}

我的错误<代码>状态。setComplete() 工作正常<代码>会话。removeAttribute(“用户”)在这里不需要做什么。

共有2个答案

章建木
2023-03-14

下面为我工作-

@RequestMapping(value = "/finish", method = RequestMethod.GET)
public String page4(HttpSession httpsession, SessionStatus status) {

/*Mark the current handler's session processing as complete, allowing for cleanup of 
  session attributes.*/
status.setComplete();

/* Invalidates this session then unbinds any objects boundto it. */
httpsession.invalidate();
return "redirect:/home";
}
严心水
2023-03-14

尝试使用WebRequest。删除属性方法,而不是HttpSession。setAttribute方法(示例1)。或者使用“SessionAttributeStore”实现完全相同功能的另一种方法。cleanupAttribute'(示例2)。

例1

@RequestMapping(value = "/finish", method = RequestMethod.GET)
public String page4(@ModelAttribute User user, WebRequest request, SessionStatus status) {
    /**
     * store User ...
     */
    status.setComplete();
    request.removeAttribute("user", WebRequest.SCOPE_SESSION);
    return "redirect:/home";
}

例2

@RequestMapping(value = "/finish", method = RequestMethod.GET)
public String page4(@ModelAttribute User user, WebRequest request, SessionAttributeStore store, SessionStatus status) {
    /**
     * store User ...
     */
    status.setComplete();
    store.cleanupAttribute(request, "user");
    return "redirect:/home";
}
 类似资料:
  • 问题内容: 我正在使用Django和Redis作为会话引擎(也是Celery,但这是其他东西)。它运行完美,我可以看到速度有所提高。 我有一个脚本,每分钟运行一次,以通过某些方法检查活动用户,如果该用户在最近一分钟内未处于活动状态,则该会话将被删除。这样做是为了满足客户的跟踪需求。 在我切换到Redis作为会话引擎之前,该脚本运行良好。实际上,该会话确实已从数据库中删除,但未从Redis中删除。我

  • 问题内容: 在导入flask时,我们导入模块等。 是一种字典,可以使用会话进行访问。 现在,我尝试清除尝试构建网站时使用的所有垃圾变量。 关于stackoverflow的答案之一使用了类似清除会话内容的命令。但是,这样的命令会产生错误,表明不存在这样的命令。 谁能为我指出每次关闭服务器或关闭网站时如何清除和如何清除会话? 问题答案: 我将这样的会话与flask一起使用,它确实起作用。我虽然不使用,

  • 我有一个CDI bean,定义如下: 现在,我想以编程方式将其从会话范围中删除: 但是变量始终为空。如何检索实例并销毁它?

  • 问题内容: 我有用于向会话添加变量的PHP代码: 当用户选择“删除”时,我想从会话数组中删除显示的变量。 但是,当我取消设置时,将删除数组中的所有变量。 如何仅删除一个变量? 问题答案: 由于是数组,因此需要找到指向您感兴趣的名称值的数组键。最后一行重新排列数组的索引,以供下次使用。

  • 因为我的用户已经将他们的会话配置为每次重新打开firefox浏览器时都重新打开。“会话”cookies回来了。但是,如果会话cookie不存在或存在24小时,我的网站需要新的身份验证。所以我遇到了这样一个问题:每次24小时后重新打开浏览器时,我都需要手动删除过期的cookies。 为了解决这个问题,我在我的页面上放了一个“注销”链接,这应该对我有所帮助。但不幸的是,这无助于。。。 我在下面的代码中

  • 我的购物车有两个功能,第一个是退货总价和商品总数量: 这两个函数返回这两个参数: 和: 我可以通过此功能销毁所有购物车会话: 如何删除特定购物车项目?我在使用这个方法,它的工作。但它不会改变总价和总数量: