session
1、概念
翻译成中文就是一个会话—>服务器用来辨别用户唯一的标识,底层其实也是用cookie来实现的
每个浏览器来访问服务器都会创建一个唯一的标识(sessionId),这个标识不会重复
2、获取sessionId
不同的浏览器会有不同的sessionId,如果浏览器又重新开了一个子窗口,那么浏览器首先会把这个sessionId传给这个子窗口,子窗口再去访问服务器,服务器也会知道是哪个浏览器
3、获取用户最后一次操作时间
返回long类型转成时间类型
4、实现原理
5、具体实现操作举例
@WebServlet(urlPatterns = "/showSession")
public class ShowSessionServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=UTF-8");//响应方
PrintWriter out=resp.getWriter();
//测试Session
HttpSession httpSession = req.getSession(true);
String message = null;//(first---> newer Or many times---> older)
Integer accessCount = (Integer) httpSession.getAttribute("accessCount");
if(accessCount == null){
accessCount = new Integer(1);
message = "newer";
httpSession.setAttribute("accessCount",accessCount);
}else{
accessCount = new Integer(accessCount.intValue()+ 1);
message = "older";
httpSession.setAttribute("accessCount",accessCount);
}
out.append("<html>")
.append("<head><title>CookieServletDemo</title></head>")
.append("<body>")
.append("<h1>'"+message+"'</h1></br>")
.append("<table border='1' align='center'>")
.append("<tr>")
.append("<td>SessionID</td>")
.append("<td>'"+httpSession.getId()+"'</td>")
.append("</tr>")
.append("<tr>")
.append("<td>Session Create Time</td>")
.append("<td>'"+httpSession.getCreationTime()+"'</td>")
.append("</tr>")
.append("<tr>")
.append("<td>Session Access Last Time</td>")
.append("<td>'"+httpSession.getLastAccessedTime()+"'</td>")
.append("</tr>")
.append("<tr>")
.append("<td>AccessCount</td>")
.append("<td>'"+accessCount+"'</td>")
.append("</tr>")
.append("</table>")
.append("</body>")
.append("</html>");
}
辨别用户是新老用户,老用户调用已有的sessionID,新用户则新创建一个sessionID
当将这个页面再次刷新时,显示older,同时最后一行显示出已访问次数
6、session与cookie的区别
存放位置:
cookie:客户端 session:服务器
储存数据类型:
cookie:一个cookie只能保存一个key-value值,并且都是String类型
session:可以保存任何类型
客户端是否可以操作:
cookie:可以在浏览器的html中通过js,或直接在设置中关闭cookie
session:不能操作
创建方式:
cookie:Cookie(String name,String value)
session:req.get(Session)
存放数量:
cookie:一般一个项目最多20个
session:对单个客户来说只有一个共享的session
缺点:
cookie:客户端禁用了cookie就写不进来,数据放在客户端也不够安全
session:占用服务器的资源,所以session中要少放数据
以上源码
https://github.com/Fancccy/CodingHome/tree/master/servlet_session/servlet_session