day08sessioncookie笔记Word格式文档下载.docx

上传人:b****4 文档编号:6301241 上传时间:2023-05-06 格式:DOCX 页数:21 大小:23.77KB
下载 相关 举报
day08sessioncookie笔记Word格式文档下载.docx_第1页
第1页 / 共21页
day08sessioncookie笔记Word格式文档下载.docx_第2页
第2页 / 共21页
day08sessioncookie笔记Word格式文档下载.docx_第3页
第3页 / 共21页
day08sessioncookie笔记Word格式文档下载.docx_第4页
第4页 / 共21页
day08sessioncookie笔记Word格式文档下载.docx_第5页
第5页 / 共21页
day08sessioncookie笔记Word格式文档下载.docx_第6页
第6页 / 共21页
day08sessioncookie笔记Word格式文档下载.docx_第7页
第7页 / 共21页
day08sessioncookie笔记Word格式文档下载.docx_第8页
第8页 / 共21页
day08sessioncookie笔记Word格式文档下载.docx_第9页
第9页 / 共21页
day08sessioncookie笔记Word格式文档下载.docx_第10页
第10页 / 共21页
day08sessioncookie笔记Word格式文档下载.docx_第11页
第11页 / 共21页
day08sessioncookie笔记Word格式文档下载.docx_第12页
第12页 / 共21页
day08sessioncookie笔记Word格式文档下载.docx_第13页
第13页 / 共21页
day08sessioncookie笔记Word格式文档下载.docx_第14页
第14页 / 共21页
day08sessioncookie笔记Word格式文档下载.docx_第15页
第15页 / 共21页
day08sessioncookie笔记Word格式文档下载.docx_第16页
第16页 / 共21页
day08sessioncookie笔记Word格式文档下载.docx_第17页
第17页 / 共21页
day08sessioncookie笔记Word格式文档下载.docx_第18页
第18页 / 共21页
day08sessioncookie笔记Word格式文档下载.docx_第19页
第19页 / 共21页
day08sessioncookie笔记Word格式文档下载.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

day08sessioncookie笔记Word格式文档下载.docx

《day08sessioncookie笔记Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《day08sessioncookie笔记Word格式文档下载.docx(21页珍藏版)》请在冰点文库上搜索。

day08sessioncookie笔记Word格式文档下载.docx

在设置Cookie的时候,不仅仅可以通过路径去设置有效的Cookie,同时还可以通过Cookie中的setDomain方法设置Cookie存在的有效域名。

如果设置的Cookie的有效域名和当前网站不符,我们把这个Cookie称为第三方Cookie,一般浏览器都会阻止第三方Cookie的保存。

1.4、删除Cookie

把Cookie有效时间设置成0,那么在浏览器退出的时候,Cookie会自动删除。

并且在设置的时候,或把Cookie的key对应的value值也设置“”

在情况Cookie的时候,需要保证情况Cookie时设置的路径和保存时设置的相同

1.5、Cookie案例(商品浏览记录)

这个练习:

1、创建JSP页面用于显示所有的商品和浏览器记录

<

html>

<

head>

title>

显示所有的商品<

/title>

/head>

body>

<

ul>

<

li>

ahref="

/day08/goods?

id=1"

>

电视机<

/a>

/li>

id=2"

洗衣机<

id=3"

笔记本<

id=4"

手机<

id=5"

空调<

/ul>

h2>

/day08/clear2"

清空历史记录<

/h2>

您曾经浏览器过的商品是<

%

//假设所有的商品都保存在数组

String[]goods={"

"

"

电视机"

洗衣机"

笔记本"

手机"

空调"

};

Cookie[]cookies=request.getCookies();

if(cookies!

=null){

for(Cookiec:

cookies){

if(c.getName().equals("

goods"

)){

//获取Cookie中的值goods="

1,2,3,4,5"

;

Stringvalues=c.getValue();

//使用空格切割

String[]ids=values.split("

);

if(ids!

=null&

&

ids.length>

0){

//把用户曾经浏览过的商品显示在页面上

for(inti=0;

i<

ids.length;

i++){

//获取商品id

try{

intid=Integer.parseInt(ids[i]);

StringgoodsName=goods[id];

out.println(goodsName);

}catch(Exceptione){}

}

}else{

out.println("

您还没有浏览器过任何商品"

}

}

}

}else{

out.println("

}

%>

/body>

/html>

2、创建Servlet程序用于获取用户浏览商品的信息,并且给客户端写Cookie,保存用户浏览的商品记录

/*

*处理用户浏览器商品的记录信息

*/

publicclassGoodsServletextendsHttpServlet{

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

//用户点击商品,就会访问到当前这个Servlet程序

Stringid=request.getParameter("

id"

//获取Cookie,如果用户是第一次浏览器商品,

//就没有和商品对应的Cookie信息,如果用户不是第一次浏览器商品,那么就会携带者Cookie过来

Cookie[]cookies=request.getCookies();

Cookiecookie=findCookie(cookies,"

//判断有没有和商品相关的Cookie

if(cookie==null){

cookie=newCookie("

id);

}else{

//获取原来Cookie的值

Stringold_id=cookie.getValue();

//判断获取的Cookie中的value值是否已经包含正在浏览器商品的id信息

if(!

old_id.contains(id)){

cookie.setValue(old_id+"

+id);

}

//保存Cookie

cookie.setPath("

/"

cookie.setMaxAge(60*60*24);

response.addCookie(cookie);

//重定向到显示所有商品的页面

response.sendRedirect("

/day08/all.jsp"

}

privateCookiefindCookie(Cookie[]cookies,Stringkey){

//判断有没有Cookie对象

if(cookies==null){

returnnull;

for(Cookiec:

if(c.getName().equals(key)){

//获取都和商品记录相关的Cookie信息

returnc;

//虽然用户带着Cookie过来,但不是和商品相关的Cookie

returnnull;

publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)

doGet(request,response);

}

3、清空历史记录

*清空Cookie

publicclassCookieServlet2extendsHttpServlet{

//直接情况

Cookiec=newCookie("

//设置时间

c.setMaxAge(-1);

//设置路径

c.setPath("

//写给客户端

response.addCookie(c);

2、Session原理和案例

2.1、Session原理分析

Session:

会话技术,从客户端打开浏览器访问服务器,到最后客户端关闭浏览器,整个过程称为一次会话。

在这个会话的过程中,服务器会针对每个客户端创建一个和客户端相关的唯一的临时容器,这个容器用于保存当前客户的所有信息。

并且在给客户端响应数据的时候,会给客户端回送一个唯一标识当前客户端相关的临时容器的id,在客户端下次访问服务器的时候,会携带这个id信息,在服务器端就可以找到和客户端相关的临时戎,继续使用这个临时容器。

如果获取这个Session对象,为每个客户端服务:

可以通过Request对象获取和当前客户端相关的唯一Session对象。

*演示Session对象

*

*在Request对象中getSession方法有2个

*getSession()在第一次调用的时候,如果服务器端没有针对当前这个客户端创建Session对象,那么调用

*这个方法的时候,服务器会自动创建一个Session对象,并且和当前这个客户端对应起来。

*如果真的这个客户端已经有一个Session对象存在,那么在getSession方法的时候,就会返回这个已经存在的Session对象

*getSession(booleanboo)

*在调用可以传递boolean值的getSession方法的时候,如果传递的false,这时只会去获取已经存在的Session

*如果根本就没有Session对象这时,返回的就是null

*如果传递的是true,获取Session对象的时候,如果没有Session就会创建,如果有,返回原始Session对象

*服务器在获取和某个客户端相关的Session对象的时候,其实需要客户端给服务器发送一个Cookie,这个Cookie中必须有

*JSESSIONID=03825AE783B680E8B31925E6AEF24B22的数据。

在服务器端我们调用getSession的时候,

*服务器内部就会根据JSESSIONID获取和客户端对应的唯一的Session对象,如果客户端没有携带JSESSIONID,那么

*服务器就会为这个客户端创建一个新的Session对象,然后给客户端回送一个Cookie,在Cookie中添加了JSESSIONID信息

*

*每个一个Session对象它其实针对的不是一个用户,而是真的的用户使用的浏览器,只要打开浏览器访问服务器,需要使用Session的时候,

*服务器就会根据当前用户的这个浏览器创建一个唯一的Session对象。

如果用户使用多个浏览器访问同一个服务器,

*服务器会根据不同的浏览器创建出不同的Session对象。

*Session对象是基于浏览器的,只要用户不关闭浏览器,那么针对这个浏览器的Session在服务器端就会一直存在,

*不管用访问当前这个项目的那个程序,都可以去使用针对这个浏览器的Session对象。

*一般我们使用Session主要保存和用户当前访问某个网站的一系列的操作信息。

*我们一般使用Session来保存用打开浏览器开发访问网站的一系列的操作,

*然后在用户最后需要显示所有操作的时候,把Session中的所有数据取出即可

*使用同一个Session对象,在多个servlet之间完成数据的共享

publicclassSessionServlet1extendsHttpServlet{

//获取Session对象

HttpSessionsession=request.getSession();

Stringip=request.getRemoteAddr();

//使用Session完成数据的共享

session.setAttribute("

addr"

"

上海传智播客"

+ip);

2.2、思考:

关闭浏览器后再次访问能获取到Session吗

Session是如何工作的?

当用户第一次访问某个Servlet程序的时候,在Servlet中我们调用request.getSession(),那么会得到和当前这个浏览器对应的Session对象,在使用response给客户端响应数据的时候,会把当前这个Session对象的jsessionid以Cookie的形式发送给客户端,当客户端再次访问服务器中的资源时,就会携带这个jsessionid数据,以Cookie的形式提交给服务器,在服务器中我们就可以根据用户携带的jsessionid获取和客户端浏览器对应的Session对象,为用户继续服务。

浏览器关闭后再次访问服务器,无法获取到前一次的Session对象。

因为我们在Servlet中获取到Session之后,如果没有认为的去书写Cookie对象,这时服务器会自动的给客户端回写Cookie,Cookie中保存的是当前针对这个浏览器的Session对象的jsessionid数据,而这个Cookie恰好是一个会话级别的Cookie,当用户关闭了浏览器之后,这个会话级别的Cookie就会自动的消失,当用再次访问服务器的时候,并不会携带上次的会话Cookie一次到服务器端,所以在服务器端拿不到的jsessionid信息,就无法获取和当前浏览器对应的那个Session对象。

虽然在服务器无法拿到上次的Session对象,但是这个Sessoin对象在服务器端依然存在。

但是有没有拿不到jsessionid,所以无法获取上次的Session对象。

 

要保证浏览器关闭之后还可以获取到上次的Session对象,这时就需要把Cookie持久化。

就需要在Servlet中手动的在Cookie中保存jsessionid的信息

//把这个Session的id持久化,创建Cookie对象

JSESSIONID"

session.getId());

//持久化,设置时间

c.setMaxAge(60);

//添加Cookie

2.3、Session案例(购物车)

网上购物的过程:

首先我们会访问某个电商网站,这时会浏览到所有的商品,浏览到自己感兴趣的商品时,我们一般点击加入购物车,加入购物车成功之后,还可以继续购物。

继续购物的时候,即就是用户在继续选择新的商品,当用户选择到了商品,点击加入购物车之后,会把当前的这个商品和以前的商品加入到同一个购物车中。

实现购物把商品加入到购物车中:

1、需要一个页面显示所有的商品

显示所有的商品,并显示加入购物车的功能<

/day08/buy?

/day08/cart.jsp"

查看购物车<

2、书写用户点击某个商品,加入到购物车中的Servlet程序

/**

*把用户选择的商品加入到购物车中

*购物车的实现原理:

*首先在Servlet中需要创建一个Map集合,用户保存用户选择的商品,以及商品的数量

*在这个HashMap集合中保存用户选择的所有商品,以及商品的数量

*

*最后需要把这个Map集合保存到Session中,用户下次再点击商品的时候,我们就可以在Servlet中获取Session对象

*然后获取Map集合中,从Map集合中获取有没有用户正在点击的商品,如果有,就在原有的数量上+1,

*如果没有,说明用户是第一次选择这个商品。

把这个商品加入的Map集合中,数量就为1

*@author屈博

*@2014年12月19日下午2:

46:

44

publicclassBuyServletextendsHttpServlet{

//假设一个保存商品的容器

String[]goods={"

//获取用户选择的商品的id信息

//判断id

if(id!

intnumber=Integer.parseInt(id);

//获取Session对象

HttpSessionsession=request.getSession();

//从Session中获取Map集合

Map<

String,Integer>

map=(Map<

String,Integer>

)session.getAttribute("

map"

//如果取出map为null就说明用户是第一次访问商品

if(map==null){

map=newHashMap<

();

map.put(goods[number],1);

/*

*说明从Session中一定获取到Map集合,也说明用户不是第一次购买商品

*1、根据id,判断当前用户选择的商品在map集合中是否存在,如果存在对应的value值+1

*2、如果不存在,说明用户不是第一次购买商品,但是当前这个商品是第一次购买,

*就把这个商品的信息和数量保存到map中

*/

if(!

map.containsKey(goods[number])){

//判断成立说明用户购买这个商品是第一次

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2