4.10 会话跟踪

  由于HTTP协议是⽆状态的,服务端并不会记录每⼀个客户端的状态,因此,如果想要实现服务器能记录客户端的状态的话,那么就需要会话跟踪技术


 

4.1.1 cookie

cookie是客服端浏览器内部的一个文本文件,专门用于记录服务器发送过来的一些文本信息,那么再每次请求的时候,客服端会都把这个cookie信息带回来给相应的服务器,那么服务器就可以获取cookie的信息,达到会话跟跟踪的目的。使用cookie的机制是基于客服端浏览器来维护与服务端的状态跟踪。
示例代码:

4.1.1 cookie
cookie是客户端浏览器内部的⼀个⽂本⽂件,专⻔⽤于记录服务器发送过来的⼀些⽂本信息,那么再每次请求的时候,客户端会都把这个cookie信息带回给相应的服务器,那么服务器就可以获取cookie的信息,达到会话
跟踪的⽬的。使⽤cookie的机制是基于客户端浏览器来维护与服务端的状态跟踪。


  示例代码: 


设置cookie 


public class SetCookieServlet extends
HttpServlet{
protected void
service(HttpServletRequest request,
HttpServletResponse response) throws
ServletException, IOException {
//
创建⼀个Cookie的实例
Cookie cookie = new
Cookie("userId","10001");
//
cookie对象设置到响应对象中
response.addCookie(cookie);
System.out.println("
成功设置
cookie");
}
}


获取cookie

public class GetCookieServlet extends
HttpServlet{
@Override
protected void
service(HttpServletRequest request,
HttpServletResponse repsonse) throws
ServletException, IOException {
//cookie
是通过request对象来得到的
//从请求中可以获取多个cookie对象
Cookie[] cookies =
request.getCookies();
for (Cookie cookie : cookies) {
//
判断cookie,只获取nameuserId
cookie对象
if("userId".equals(cookie.getName())) {
System.out.println(cookie.getValue());
}
}
}
}


cookie保存中⽂ 


在保存cookie的时候如果需要保存中⽂,那么中⽂信息需要经过编码后才可以写⼊cookie 

示例代码:

编码使⽤URLEncoder

String str = URLEncoder.encode("张三",
"utf-8");
Cookie cookie = new Cookie("userName",
str);



解码使⽤URLDecoder

String str =
URLDecoder.decode(cookie.getValue(), "utf-
8"
);
System.out.println(str);


cookie的⽣命周期:


默认
cookie只会保存在浏览器进程的内存中,并不会写⼊cookie⽂件,如果关闭了浏览器,那么浏览器的进程也就消失了,那么对应的内存就会释放空间,因此
cookie也就销毁。如果想将cookie写⼊⽂件,那么就必须设置cookie的⽣命时⻓,⼀旦设置了⽣命时⻓,那么就表示这个cookie会在⽂件中保留多⻓的时间,到了这
个时间之后,浏览器就会⾃动销毁这个cookie


设置cookie存活时间:


//设置为0表示⽴即删除cookie
cookie.setMaxAge(0);
//
设置为正数表示cookiecookie⽂件的存活时间,
单位:秒
cookie.setMaxAge(5);
//
设置为-1表示cookie只保留在浏览器器的进程中,
关闭浏览器之后会销毁
cookie
cookie.setMaxAge(-1);
 

 4.2.2 Session
Session是基于服务端来保存⽤户的信息,这个是和cookie的最⼤区别。不同的客户端在请求服务器的时候,服务器会为每⼀个客户端创建⼀个Session对象并保存在服务器端, Session对象是每个客户端所独有
的,相互之间不能访问。服务器为了区别不同的
Session属于哪⼀个客户端,因此Session对象也有⼀个唯⼀标识,叫做SessionID。需要注意的是这个SessionID是以cookie的机制保存在客户端浏览器。每次请求的时候,浏览器都会把这个SessionID带回服务端,服务端根据这个SessionID就可以找到对应的Session对象。
 


示例代码:

public class SessionServlet extends
HttpServlet{
@Override
protected void
service(HttpServletRequest request,
HttpServletResponse response) throws
ServletException, IOException {
//HttpSession
对象是在第⼀次调⽤
request getSession() ⽅法时才会创建
// 注意: getSession() 的⽅法会先判断之
前是否为客户端创建了
session 实例,
// 如果创建了,则使⽤之前创建好的
Session 对象,没有则创建⼀个新的 Session
HttpSession session =
request.getSession();
//
创建 HttpSession 的同时,会创建⼀个唯
⼀的标识
SessionID
//
这个 sessionId 会保存在浏览器的 cookie
中,每次请求会带回这个 id 找到相应的 session 对象
String sessionId = session.getId();
System.out.println(sessionId);
}
}







  
 






猜你喜欢

转载自blog.csdn.net/zhangguoqin66/article/details/80955032