下面的代码也可以增加访问者访问的每一页的计数器,但是我需要弄清楚如何做到这一点,因此不允许在同一页面上增加计数(阻止某人)垃圾邮件刷新并增加视图计数)。有没有一种方法可以检查Java Servlet中的URL是否已更改?
代码
HttpSession session = request.getSession() ; // Will create new
session.setAttribute("timesLoggedIn", 0);
session.setAttribute("pictureNames", null);
// session.setAttribute("pictureNames", null);
Integer accessCount = (Integer)session.getAttribute("timesLoggedIn") ;
String pictureNames = request.getPathInfo();
String pathName = (String)session.getAttribute("pictureNames");
String id = session.getId();
//start session
//increment count by one
//if count already implemented, don't implement.
out.println(pathName);
if (accessCount < 1 && pathName == null) {
out.println("<h1>This is your first visit!</h1>");
session.setAttribute("timesLoggedIn", 1);
session.setAttribute("pictureNames", pictureNames);
Utilities.IncreaseCount(out, pictureName);
}
out.println(pathName);
答案 0 :(得分:0)
您可以使用servlet请求API获取当前页面路径,例如request.getPathInfo()
然后可以使用它来创建该页面唯一的会话属性键。如果页面路径中有某些字符不允许作为会话属性键的一部分,那么您显然可以替换字符串中的字符。由您决定是否还要将查询参数视为唯一页面,例如/page1?a=1
与/page1?a=2
那么,如果您想/如果不知道密钥,那么用1
将值放在那里就很简单了。如果该密钥已经在会话中,请不要增加它,只需读取该值以显示它即可。
请注意,如果您确实认为查询参数是唯一的页面,并且它们对于/page1?a=1
和/page1?a=2
具有不同的键,这可能会给内存消耗带来潜在的危险,因为讨厌的人会弄清楚这一点。理论上,使用独特的查询参数编写脚本来请求许多不同的页面,这些脚本会缓慢但一定会用大量少量数据填充会话,但最终可能会在持续的一段时间内通过污染会话存储而导致某种拒绝服务。