Servlet(3):Cookie和Session
一. Cookie
Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了
1. 使用cookie记录用户上一次访问的时间
public class CookieTest extends javax.servlet.http.HttpServlet {
boolean flag=false;
protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
//乱码问题
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
//通过用户请求,检查它是否带有cookie
Cookie[] cookies = request.getCookies();
if(flag){
if(cookies!=null){
for (int i = 0; i < cookies.length; i++) {
Cookie cookie=cookies[i];
if(cookie.getName().equals("lastLoginTime")){
response.getWriter().println("你上次来的时间为:"+cookie.getValue());
}
}
}
}else {
response.getWriter().println("你是第一次来");
}
flag=true;
<span class="hljs-comment">//服务端建立一个cookie,把这个cookie发给客户端</span>
response.addCookie(<span class="hljs-keyword">new</span> <span class="hljs-type">Cookie</span>(<span class="hljs-string">"lastLoginTime"</span>,<span class="hljs-type">System</span>.currentTimeMillis()+<span class="hljs-string">""</span>));
}
<span class="hljs-keyword">protected</span> void doGet(javax.servlet.http.<span class="hljs-type">HttpServletRequest</span> request, javax.servlet.http.<span class="hljs-type">HttpServletResponse</span> response) <span class="hljs-keyword">throws</span> javax.servlet.<span class="hljs-type">ServletException</span>, <span class="hljs-type">IOException</span> {
doPost(request,response);
}
}
1,第一次访问时这个Servlet时,效果如下所示:
2,点击浏览器的刷新按钮,进行第二次访问,此时就服务器就可以通过cookie获取浏览器上一次访问的时间了,效果如下:
二. Session
Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务
1. session实现原理
//session存入信息
//乱码问题
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("utf-8");
<span class="hljs-comment">//Session由服务器自动创建;HttpSession 得到的sessioin对象</span>
HttpSession session = request.getSession();
<span class="hljs-comment">//得到sessionID,一次会话,一个seesionID;</span>
<span class="hljs-built_in">String</span> id = session.getId();
response.getWriter().println(<span class="hljs-string">"获得的session的ID:"</span>+id);
<span class="hljs-built_in">String</span> name=<span class="hljs-string">"学java的闪电侠"</span>;
<span class="hljs-comment">//向session中存入一个值;</span>
session.setAttribute(<span class="hljs-string">"name"</span>,name);
response.getWriter().println(<span class="hljs-string">"存入信息成功:"</span>+name);
//获得session存入的信息
//乱码问题
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("utf-8");
//获得
HttpSession session = request.getSession();
String name = (String) session.getAttribute("name");
response.getWriter().println("得到的session存入的信息:"+name);
1,第一次访问时,服务器会创建一个新的sesion,并且把session的Id以cookie的形式发送给客户端浏览器
2,再次请求服务器,此时就可以看到浏览器再请求服务器时,会把存储到cookie中的session的Id一起传递到服务器端了
【注意:session.invalidate(); // 通过代码注销会话】
三. Session和Cookie的主要区别
- Cookie是把用户的数据写给用户的浏览器
- Session技术把用户的数据写到用户独占的session中
- Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象