session:一次请求的开始到关闭就是一次会话
比如:访问淘宝,再关闭淘宝,在你这次的访问淘宝的时间段内sesison都是共享的
session的机制:
客户端访问服务器的同时,服务器会产生一个session对象,这个session对象可以用来保存客户的信息,比如用户名和密码
从我理解来看这个对象里有id的属性,服务器会将这个id的属性值复制一份,也就是JESSONID,这个值会自动的和Cookie进行绑定,当响应客户端的同时,cookie会带着JESSIONID放到客户端
总结:本质上来说sessonId和JESSONID就是一个东西,方便客户端和服务器来识别的,判断是否是同一个请求内
验证实例结构图:
<body>
<form action="success.jsp">
用户名:<input type="text" name="uname" ></br>
密码:<input type="password" name="upwd"></br>
<input type="submit" value="登录">
</form>
</body>
提交表单单登录成功,会在服务器端产生一个sessionId
我们看success,jsp响应页面:
<body>
<%
response.setContentType("utf-8");
String name=request.getParameter("uname");
String pwd=request.getParameter("upwd");
if(name.equals("张三")&& pwd.equals("123")){
session.setAttribute("uname", name);
session.setAttribute("upwd", pwd);
//session.setMaxInactiveInterval(10);//设置有效的非活动时间
/* 服务器会自动产生一个sessionId
通过getId()方法来得到这个sessionId
将这个sessionId加入到cookie中,客户端带过来的cookie来获取JESSIONID
*/
//输出看看sessionId的值,看控制台
System.out.println("sessionId"+session.getId());//第一次请求访问服务端就会产生一个sessionid
//这是给客户端回传的cookie
Cookie cookie =new Cookie("uname",name);
response.addCookie(cookie);
response.sendRedirect("a.jsp");
看我们的客户端页面a.jsp
<body>
<%
//这里重新访问a.jsp页面
/* 在cookie中可以拿到JESSSIONID
通过getValue();
最后发现JSESSIONID和sessionid的值的一样的
服务端的sessionid和客户端的JSESSIONID是一一对应的
*/
Cookie[] cookies=request.getCookies();
for(Cookie s: cookies){
if(s.getName().equals("JSESSIONID")){ //请求响应会在响应中把sessionId复制一份成JESSIONID带给客户端
//看控制台
System.out.print("JSESSIONID"+s.getValue());
}
}
%>
</body>
现将控制台清掉:
访问:
之后看控制台结果一模一样,由此可见服务端的sessionId和控制台的JESSIONID是一样的