Tôi nghĩ rằng vấn đề thường gặp khi sử dụng @SessionAttributes
là sau khi bạn không kích hoạt phiên hiện tại của bạn, Spring MVC đính kèm mô hình thuộc tính trở lại vào phiên mới - do đó gây ấn tượng nó không bao giờ làm mất hiệu lực
Bạn có thể kiểm tra giá trị của JSESSIONID trước & sau khi bạn vô hiệu hóa giá trị đó. Bạn sẽ nhận được một thương hiệu JSESSIONID mới, nhưng thuộc tính mô hình trước đó được gắn thẳng vào phiên làm việc mới
tôi thấy mình cần phải làm điều này để lau một thuộc tính mô hình tên "phản động" từ phiên sau khi hủy bỏ hiệu lực nó
@RequestMapping(value="/invalidate", method=RequestMethod.POST)
public String invalidate(HttpSession session, Model model) {
session.invalidate();
if(model.containsAttribute("counter")) model.asMap().remove("counter");
return "redirect:/counter";
}
Nếu bạn có thuộc tính rất nhiều, dĩ nhiên bạn có thể thử tất cả mọi thứ lau tức sử dụng
model.asMap().clear();
Nhưng theo ý kiến của tôi tiếp cận tốt hơn là để làm mất hiệu lực sử dụng một bộ điều khiển khác nhau mà không có @SessionAttribute
trên đó. Do đó bất kỳ mô hình nào thuộc tính các bộ điều khiển khác sẽ không được gắn trực tiếp vào phiên mới. Ví dụ:
@Controller
@RequestMapping("/logout")
public class LogoutController {
@RequestMapping(method=RequestMethod.POST)
public String logout(HttpSession session) {
session.invalidate();
return "redirect:/login";
}
}
Bạn gặp phải loại lỗi nào? Vui lòng đăng một stacktrace – Jk1