1)介绍
cookie是由 服务器端生成,通过response写回浏览器,保留在浏览器中。
下一次访问,浏览器会根据不同的规则,携带不同的cookie(通过request)我们服务器可以接收cookie。
cookie API:
Cookie new cookie(String key,String val)
response.addCookie(cookie)
Cookie[] cookies=request.getCookies()
1 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 2 Cookie cookie=new Cookie("A","12233"); 3 //获取cookie 所有的cookie,返回追是数组形式。 4 Cookie[] cookies=request.getCookies(); 5 for(Cookie ck:cookies){ 6 //获取cookie的value 7 System.out.println(ck.getValue()); 8 //获取cookie的key 9 System.out.println(ck.getName()); 10 } 11 //获取指定的cookie 12 13 //写回cookie 14 response.addCookie(cookie); 15 16 }
2)案例:访问网站记录用户访问时间。
分析:1、创建一个servlet 接收请求。
2、从request 获取对应的cookie。
3、获取上次登录的cookie并打印,判断该值是否为空,如果为空则表示第一次登录。并输出。
4、记录当前登录的时间并更新cookie里的值。
代码:
1 package jd.com.cookie_rem; 2 3 import javax.servlet.ServletException; 4 import javax.servlet.annotation.WebServlet; 5 import javax.servlet.http.Cookie; 6 import javax.servlet.http.HttpServlet; 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 import java.io.IOException; 10 import java.text.DateFormat; 11 import java.text.SimpleDateFormat; 12 import java.util.Date; 13 14 @WebServlet(name = "Servlet_Rem") 15 public class Servlet_Rem extends HttpServlet { 16 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 17 18 } 19 20 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 21 //0)设置编码。 22 response.setContentType("text/html;charset=utf-8"); 23 //1)获取cookie 和)输出cookie 24 Cookie[] cookies=request.getCookies(); 25 String c=getCookiebyName("lastime",cookies); 26 if(c==null){ 27 response.getWriter().print("the first time accesss the website!"); 28 }else{ 29 Long da_l=Long.parseLong(c); 30 SimpleDateFormat date=new SimpleDateFormat(); 31 String data_str=date.format(da_l); 32 response.getWriter().print(" the last time of accessing website is:"+" "+data_str); 33 } 34 //3)记录当前访问时间。 35 Long data=new Date().getTime(); 36 Cookie new_rec=new Cookie("lastime",data.toString()); 37 response.addCookie(new_rec); 38 } 39 private String getCookiebyName(String name,Cookie[] cookies){ 40 String flag=null; 41 if(cookies!=null){ 42 for(Cookie cookie:cookies){ 43 if (cookie.getName().equals(name)){ 44 flag=cookie.getValue(); 45 } 46 } 47 } 48 return flag; 49 50 } 51 }
上面设置的cookie,如果浏览器断开,再次访问的时候,相应的cookie也没有了。
3)cookie的持久化:
setMaxAge(int second)设置cookie过期时间,单位是秒。
在设置中:
4)设置cookie路径,以"/"开始 以"/"结束。为特定的url设定cookie。
setPath();
new_rec.setPath("/rem"+"/");
4)session
是服务端生成,浏览器在通过方法:通过HttpServletRequest(request)获取session对象,getsession()方法获取,因为session是域对象,所以可以通过xxxAttribute()方法获取。对应的session值。
通过invalidate() 设置成session过期。
浏览器从session获取对应的session值,如果有,给浏览器返回Jsessionid,如果没有,则服务器创建,并返回对应的Jsessionid.