【发布时间】:2016-01-20 09:34:17
【问题描述】:
我有一个显示数据库中所有记录的 jsp 页面。每列下方都有一个删除按钮。删除记录的servlet的代码是。
new userDao().get(User.Class,Long.parseLong("id")).delete();
// for some reasons I cannot use requestDispatcher, so I store the delete successful message in a session
request.getSession().setAttribute("message","Delete successful.");
// view.html is a servlet that gets all records
response.sendRedirect("view.html");
在view.html servlet中
request.setAttribute("message",get the message attribute from HTTPSession);
request.getSession().removeAttribute("message");
// go back to jsp
request.getRequestDispatcher("view.jsp").forward(request,response);
我的很多页面都是这样的。我知道会话用于跨越多个请求的数据,但我在做什么是好的还是坏的做法?我做错了吗?
【问题讨论】:
-
response.sendRedirect("view.html?message=" + URLEncoder.encodeURL("D...", "UTF-8"));也许?使用 view.jsp (session=false, ${para.message}) 或 JavaScript -
@JoopEggen 如果你使用这种方法,要非常小心代码注入攻击。
-
Frameworks 将这些“flash 属性”称为“flash 属性”,并尽量避免它们导致的多选项卡并发问题:docs.spring.io/spring/docs/current/spring-framework-reference/…
-
@JiriTousek 删除活动已经发生,查看只是结果。但是,是的,第一行代码也困扰了我。
-
@JoopEggen 这不是我的意思——我的意思是如果你从 URL 参数中获取一条消息并显示它,你需要转义它,这样没有人可以使用它来将他们的代码插入你的以这种方式页面(又名 XSS)。
标签: java session jakarta-ee servlets