session和cookie.docx
- 文档编号:24413665
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:55
- 大小:2.90MB
session和cookie.docx
《session和cookie.docx》由会员分享,可在线阅读,更多相关《session和cookie.docx(55页珍藏版)》请在冰豆网上搜索。
session和cookie
Servlet知识2
当用户第一次访问时,服务器会返回一个cookie给用户浏览器,第二次访问时,用户自己带着cookie过来,不需要再创建新的cookie。
保存会话数据的两种技术:
●Cookie
•Cookie是客户端技术,服务器把每个用户的数据以cookie的形式写给用户各自的浏览器。
当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。
这样,web资源处理的就是用户各自的数据了。
●一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)。
●一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储多个WEB站点提供的Cookie。
●浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。
●如果创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie(即存储在浏览器的内存中),用户退出浏览器之后即被删除。
若希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。
将最大时效设为0则是命令浏览器删除该cookie。
●注意,删除cookie时,path必须一致,否则不会删除
●Session(失效时间一般是半小时,但是可以自己设置时间)
•Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。
●在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:
一个浏览器独占一个session对象(默认情况下)。
因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。
●Session和Cookie的主要区别在于:
•Cookie是把用户的数据写给用户的浏览器。
•Session技术把用户的数据写到用户独占的session中。
●Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象。
Session默认是浏览器进程,关闭了,原来的就没有了,要自己重写cookieid,那么再重新打开一个或者多个浏览器就会使用原来的session里的信息或者数据。
IE8以下版本,打开一个浏览器就会创建一个新的session。
以上版本就不会,打开任意浏览器都是共用一个session。
Session和cookie都是用来保存用户数据的。
怎么创建cookie?
1.把用户的数据封装到cookie后
2.通过response创建cookie
3.服务器一看,response中有东西,会自动获取
4.通过request的getCookies()方法拿到所有cookie(循环遍历)
javax.servlet.http.Cookie类用于创建一个Cookie,response接口也中定义了一个addCookie方法,它用于在其响应头中增加一个相应的Set-Cookie头字段。
同样,request接口中也定义了一个getCookies方法,它用于获取客户端提交的Cookie
request.getSession();//当执行到这句代码时,才会创建session,不是一开始访问网站就会创建
session的实现是基于cookie的,用户第一次访问后,服务器即servlet会为用户创建一个session并且创建一个sessionid号(是用cookie实现),会回写一个cookieid给浏览器即用户,用户下次访问后,就带着这个cookieid来,直接取相应的session给对应的用户服务
request.getSession(false);只获取session,不创建session,用于购物车结账时,体现高超的编程。
虽然用这个request.getSession();也能实现
以下代码实现电子商务网站必写,含义是当用户打开多个浏览器,都是共用一个session。
手工以cookie形式发sessionid,以解决关闭浏览器后,上次买的东西还在(哪里获取了session,以下代码就在哪里写)。
Stringid=session.getId();
Cookiecookie=newCookie("JSESSIONID",id);//覆写sessionid
cookie.setPath("/day07");//要一样,用httpwatch查看
cookie.setMaxAge(30*60);//30minutes
response.addCookie(cookie);//回写给浏览器
1.cookie案例-显示用户上次访问网站的时间
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
out.print("
");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriterout=response.getWriter();
out.print("上次访问时间:
");
Cookiecookies[]=request.getCookies();
for(inti=0;cookies!
=null&&i if(cookies[i].getName().equals("lastAccessTime")){ longcookieValue=Long.parseLong(cookies[i].getValue()); Datedate=newDate(cookieValue); out.print(date.toLocaleString()); } } Cookiecookie=newCookie("lastAccessTime",System.currentTimeMillis()+""); cookie.setMaxAge(1*30*24*3600);//以秒为单位,有效时间,不设置的话,是浏览 器进程,关闭就没有了cookie cookie.setPath("/day07");//斜杠代表网站,设置cookie的有效路径,不设置的话, 就是servlet的路径 response.addCookie(cookie)} CookieDemo2代码如下: publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ Cookiecookie=newCookie("lastAccessTime",System.currentTimeMillis()+""); cookie.setMaxAge(0);//以秒为单位 cookie.setPath("/day07"); response.addCookie(cookie);//将cookie回写给浏览器 response.sendRedirect("/day07/servlet/CookieDemo1");//清除cookie之后,回到第一个servlet } 2.Cookie案例-显示商品浏览历史纪录 publicclassCookieDemo3extendsHttpServlet{ publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); PrintWriterout=response.getWriter(); //输出所有商品 out.write("本站有如下商品: Map for(Map.Entry map.entrySet()){ Bookbook=entry.getValue(); out.print(" id="+book.getId()+"'>"+book.getName()+" } //显示用户看过的商品 out.print(" Cookiecookies[]=request.getCookies(); for(inti=0;cookies! =null&&i if(cookies[i].getName().equals("bookHistory")){ Stringids[]=cookies[i].getValue().split("\\,");//2,3,1 for(Stringid: ids){ Bookbook=(Book)Db.getAll().get(id); out.print(" id="+book.getId()+"'>"+book.getName()+" } } } } } classDb{ privatestaticMap static{ map.put("1",newBook("1","JavaWeb开发","老k","一本好书")); map.put("2",newBook("2","jdbc开发","老张","一本好书")); map.put("3",newBook("3","spring开发","老li","一本好书")); map.put("4",newBook("4","struts开发","老张","一本好书")); map.put("5",newBook("5","android开发","老bi","一本好书")); } publicstaticMapgetAll(){ returnmap; } } classBook{ privateStringid; privateStringname; privateStringauthor; privateStringdescription; publicBook(){ super(); } publicBook(Stringid,Stringname,Stringauthor,Stringdescription){ this.id=id; this.name=name; this.author=author; this.description=description; } publicStringgetId(){ returnid; } publicvoidsetId(Stringid){ this.id=id; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicStringgetAuthor(){ returnauthor; } publicvoidsetAuthor(Stringauthor){ this.author=author; } publicStringgetDescription(){ returndescription; } publicvoidsetDescription(Stringdescription){ this.description=description; } } //显示详细信息的servlet publicclassCookieDemo4extendsHttpServlet{ publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ //根据用户带过来的id,显示相应的详细信息 response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); PrintWriterout=response.getWriter(); Stringid=request.getParameter("id"); Bookbook=(Book)Db.getAll().get(id); out.write(book.getId()+" out.write(book.getName()+" out.write(book.getAuthor()+" out.write(book.getDescription()+" //2.构建cookie,回写给浏览器; StringcookieValue=buildCookie(id,request); Cookiecookie=newCookie("bookHistory",cookieValue); cookie.setMaxAge(1*30*24*3600);//1个月 cookie.setPath("/day07"); response.addCookie(cookie); } privateStringbuildCookie(Stringid,HttpServletRequestrequest){ //bookHistory=null11 //bookHistory=2,5,111,2,5 //bookHistory=2,5,411,2,5 //bookHistroy=2,511,2,5//假如列表最多3个 StringbookHistroy=null; Cookiecookies[]=request.getCookies(); for(inti=0;cookies! =null&&i if(cookies[i].getName().equals("bookHistory")){ bookHistroy=cookies[i].getValue(); } } if(bookHistroy==null) returnid; //if(bookHistroy.contains(id))不能这样21,23也包括1 List LinkedList if(list.contains(id)){ linkedlist.remove(id); linkedlist.addFirst(id); }else{ if(list.size()>=3){ linkedlist.removeLast(); linkedlist.addFirst(id); }else linkedlist.addFirst(id); } if(list.contains(id)){ linkedlist.remove(id); }else { if(list.size()>=3){ linkedlist.removeLast();} } linkedlist.addFirst(id); StringBuffersb=newStringBuffer(); for(Stringbid: linkedlist){ sb.append(bid+","); } returnsb.deleteCharAt(sb.length()-1).toString(); } 3.session案例: 将用户的数据保存在session范围内 SessionDemo1: publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ //response.setContentType("text/html"); //PrintWriterout=response.getWriter(); HttpSessionsession=request.getSession(); session.setAttribute("name","洗衣机"); Stringid=session.getId(); Cookiecookie=newCookie("JSESSIONID",id);//覆写sessionid cookie.setPath("/day07");//要一样,用httpwatch查看 cookie.setMaxAge(30*60);//30minutes response.addCookie(cookie);//回写给浏览器 //session.setMaxInactiveInterval(3600);//1小时 //session.invalidate();//摧毁 //http: //localhost: 8080/day07/servlet/sessionDemo1 } 以下是sessiondemo2,显示用户所购买的东西 publicclassSessionDemo2extendsHttpServlet{ publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=utf-8"); HttpSessionsession=request.getSession(); Stringname=(String)session.getAttribute("name"); PrintWriterout=response.getWriter(); if(name! =null) out.write(name); else out.write("nobuy"); } } 以下是首页的servlet: 第一次访问这个servlet publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=utf-8"); PrintWriterout=response.getWriter(); request.getSession(); //URL重写技术,用于浏览器禁用cookie之后的技术。 如果没有禁用cookie,第一次访问时,有2个cookieid, //但是,第二次访问时,url重写技术就没有带cookieid啦, //因为用户自己带了cookieid过来(没有禁用cookie,服务器就会回写一个cookieid给用户,用户再次访问时就会自己带过来cookieid) Stringurl1=response.encodeRedirectURL("/sessiondemo/servlet/SessionDemo1"); Stringurl2=response.encodeRedirectURL("/sessiondemo/servlet/SessionDemo2"); out.print(" out.print(" } 4.用session实现简单的购物(以下代码只用于浏览器没有禁用cookie的条件下) //首页,列出所有书 publicclass
");
");
你曾经看过的商品
");
");
");
");
");
");
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- session cookie