sessioncookie之会话笔记.docx

上传人:b****4 文档编号:24855750 上传时间:2023-06-02 格式:DOCX 页数:23 大小:221.34KB
下载 相关 举报
sessioncookie之会话笔记.docx_第1页
第1页 / 共23页
sessioncookie之会话笔记.docx_第2页
第2页 / 共23页
sessioncookie之会话笔记.docx_第3页
第3页 / 共23页
sessioncookie之会话笔记.docx_第4页
第4页 / 共23页
sessioncookie之会话笔记.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

sessioncookie之会话笔记.docx

《sessioncookie之会话笔记.docx》由会员分享,可在线阅读,更多相关《sessioncookie之会话笔记.docx(23页珍藏版)》请在冰豆网上搜索。

sessioncookie之会话笔记.docx

sessioncookie之会话笔记

会话:

1:

会话跟踪技术Session/验证验证码/限止重复提交/实现购物车

2:

Cookie/记录用户名/实现自动登录/

3:

Session与Cookie的关系

3:

隐藏表单

4:

重写url

5:

再讲JSP/指令/动作/

6:

EL表达式

会话的四种技术:

Session

Cookie

隐藏表单

重写url

1:

会话技术之cookie

特点:

1:

由Servlet创建–》Cookiec=newCookie(…);

2:

Servlet将cookie发送给浏览器。

即保存到客户端的。

3:

由浏览器保存这个cookie.

4:

浏览再次访问这个Servlet/或是其他允许的Servletr时,再带这个Cookie去访问服务器。

Cookie的四大属性:

1:

nameandvalue->用于保存一些数据。

2:

maxAge最大的生命周期–》默认的值为-1,即保存到浏览器的缓存中。

-1:

默认值。

0:

删除保存的cookie

+N:

保存多少秒,保存到浏览缓存的目录下。

3:

domain–域–》在某些网上,跨域访问就可以设置值,

Domain=

由这个cookie:

4:

path用于权限控制的。

类似于package。

1:

保存cookie的基本示例

publicclassOneServletextendsHttpServlet{

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

//1:

声明Cookie,必须要声明时,设置name,value

Randomr=newRandom();

inta=r.nextInt(100);

//创建cookie

Cookiecookie=newCookie("addr","Random_is_"+a);

//通知浏览器来保存cookie,以下的方法,会形成一个响应头:

set-cookie:

addr=Random_is_3

//浏览器接收到这种头以后,就会保存这个cookie到浏览器的缓存(内存)中

response.addCookie(cookie);

}

}

查看运行时的http请求+响应协议:

以下是第一次发出请求时的请示协议:

(请注意,里面没有cookie信息)

以下是第一次响应协议:

请注意,每一次访问OneServlet,都会产生一个新的随机值,保存到cookie中去,再做resp.addCookie(…);

以下是第二次访问这个Servlet的请示协议:

由于浏览器的缓存即内存中,保存了cookie,所以,再次访问这个servlet,浏览器会以请求头的形式,将这个cookie带到服务器上去:

第二次的响应协议:

由于再次创建一个cookie所以,会重新生成一个cookie让浏览器保存,随机值是新的:

此时,由于cookie的所有信息,与之前的cookie一样,所以,后面的cookie会覆盖之前的cookie:

关闭浏览器以后:

发现,没有带cookie去,

因为cookie的默认的maxAge=-1,即只保存到浏览器的缓存中。

如果你关闭了浏览器这个程序,则浏览器就释放了所使用的存,所以再次访问cookie就没有了。

cookie中保存中文(需要编解码URLencoder.encode、URLdecode.decode)

Cookie中不能保存中文,空格。

如果要保存中文或是空格,则必须要进行url编码。

如果在cookie中保存中文:

进行编码:

Stringval="山东济南你好这是我的家";

val=URLEncoder.encode(val,"UTF-8");

Cookiec=newCookie("addr",val);

c.setPath("/");

response.addCookie(c);

如果你保存cookie时进行了编码,则在取cookie的值时,必须转码:

val=c.getValue();

val=URLDecoder.decode(val,"UTF-8");

maxage=c.getMaxAge();//-1

path=c.getPath();//null

domain=c.getDomain();//null

2:

设置cookie的生命周期

void

setMaxAge(intexpiry)

Setsthemaximumageofthecookieinseconds.

Randomr=newRandom();

inta=r.nextInt(100);

//创建cookie

Cookiecookie=newCookie("addr","Random_is_"+a);

//设置cookie的生命周期,以秒为单位

cookie.setMaxAge(60*60*24*7);

//通知浏览器来保存cookie,以下的方法,会形成一个响应头:

set-cookie:

addr=Random_is_3

//浏览器接收到这种头以后,就会保存这个cookie到浏览器的缓存(内存)中

response.addCookie(cookie);

以下是在设置maxAge以后的请求+响应的协议:

以下是设置了maxAge以后的响应的协议:

HTTP/1.1200OK

Server:

Apache-Coyote/1.1

Set-Cookie:

addr=Random_is_6;Expires=Mon,27-Jul-201501:

06:

00GMT-如果有生命周期,则一定会保存到文件中。

但同时会先保存到缓存中

Content-Length:

0

Date:

Mon,20Jul201501:

06:

00GMT

也可以查看,浏览器保存的cookie文件:

3:

删除cookie

设置maxAge=0

当设置Cookie.setMaxAge(0);以后,响应的头是:

(这个原则,就是设置了一个过去的时间)

HTTP/1.1200OK

Server:

Apache-Coyote/1.1

Set-Cookie:

addr=Random_is_14;Expires=Thu,01-Jan-197000:

00:

10GMT

Content-Length:

0

Date:

Mon,20Jul201501:

15:

28GMT

4:

读取cookie

读取cookie是request的工作:

Cookie[]

getCookies()

ReturnsanarraycontainingalloftheCookieobjectstheclientsentwiththisrequest.

读取所有这个项目/20150720保存的cookie.

实现一个功能:

1:

如果没有名称叫name的cookie就保存一个新的cookie.

2:

如果有名称为name的cookie,如果它的值是Jack就修改成rose.

3:

如果有名称为name的cookie,且名称为rose,就删除这个cookie.

//1:

读取所有cookie

Cookie[]cs=request.getCookies();

Cookiecookie=null;

if(cs!

=null){

//遍历找有没有名称叫name的cookie

for(Cookiec:

cs){

if(c.getName().equals("name")){

cookie=c;

break;

}

}

}

if(cookie==null){//没有找到名称叫name的coooke

cookie=newCookie("name","Jack");

cookie.setMaxAge(60*30);//分钟

response.addCookie(cookie);

}else{

//判断名称是否是Jack

if(cookie.getValue().equals("Jack")){

//修改名称

cookie.setValue("Rose");

response.addCookie(cookie);//修改以后,必须要通知浏览器保存

}else{

cookie.setMaxAge(0);//删除cookie

response.addCookie(cookie);

}

}

}

5:

cookie的path属性

void

setPath(java.lang.Stringuri)

Specifiesapathforthecookietowhichtheclientshouldreturnthecookie.

Path默认值:

保存cookie的servlet的url目录:

如:

http:

//localhost:

8080/20150720/one->/20150720

http:

//localhost:

8080/20150720/abc/one->/20150720/abc

path的功能,就是权限:

path为/20150720/abc的cookie这个/20150720/two目录下的serlvet读取不到。

及不在/abc下的,都读取不到。

如果某个cookie的path是/20150720/xy则只有/20150720/xy这样的目录结构,才可以访问这个cookie./

如果/20150720/index.jsp

所以说,如果你想设置一个cookie让所有本项目中的资源(JSP/servlet/html)都可以读到这个cookie则可以手工的设置

Path=

Cookiec=newCookie("mail","wj@");

c.setPath(request.getContextPath());

对于一个cookie来说,

必须要name,path,domain三者一样,才叫同一个cookie:

刚才保存了一个cookie:

Cookiec=newCookie(“mail”,wj@:

”_);

c.setPath(“/20150720/xy”);

与下面的cookie完全不是一个:

Cookiec=newCookie(“mail”,wj@:

”_);

c.setPath(“/20150720”);

对于path来说,你保存的可以是任意的值,但你读取cooke.getpath():

永远返回的是nuull.

当设置了path以后:

HTTP/1.1200OK

Server:

Apache-Coyote/1.1

Set-Cookie:

mail="wj@";Version=1;Path=/20150720

Content-Length:

0

Date:

Mon,20Jul201502:

00:

16GMT

还可以设置

path=/所有的tomcat中的项目,都可以读取到这个cookie

与domain=共同使用可以在多个域名中访问同一个Cookie.

Path=/20150720所有这个项目中的资源都可以读取到这个cookie.

domain–跨域读取cookie示例

在上保存一个cookie

要求:

上可以访问到这个cookie.

设置两个:

Path=/

Domain=

Cookiec=newCookie("addr","SDJN");

c.setPath("/");

c.setDomain("");

response.addCookie(c);

步1:

创建两个域名

/a"

unpackWARs="true"autoDeploy="true"/>

/b"

unpackWARs="true"autoDeploy="true"/>

步2:

修改hosts文件

192.168.1.68

127.0.0.1

步3:

创建两个目录

6:

Cookie的功能

1:

记录浏览记录。

2:

记录用户的登录名称。

1:

实现记录用户登录名称的功能

1:

使用java代码的实现

if(user!

=null){

HttpSessions=request.getSession();

s.setAttribute("user",user);

//在登录成功以后,记录用户名称到cookie

Cookiec=newCookie("loginName",URLEncoder.encode(user.getName(),"UTF-8"));

c.setPath("/");

c.setMaxAge(60*60*24*30);

response.addCookie(c);

response.sendRedirect(request.getContextPath()+"/stud");

}else{

 

在显示页面时读取cookie:

Cookie[]cs=request.getCookies();

Stringname="";

if(cs!

=null){

for(Cookiec:

cs){

if(c.getName().equals("loginName")){

name=c.getValue();

name=URLDecoder.decode(name,"UTF-8");

break;

}

}

}

2:

使用js代码实现

保存:

function_login(){

varnm=document.getElementsByName("name")[0].value;

vardate=newDate();

vartime=date.getTime()+(1000*60*60*24*7);

date=newDate(time);

document.cookie="userName="+escape(nm)+";expires="+date.toGMTString();

document.forms[0].submit();

}

读取:

functionread(){

varcs=document.cookie;//JSESSIONID=0B6391A4C552D5EF6BB8300F6304DE7C;userName=Alex

cs=cs.split(";");

for(vari=0;i

varc=cs[i];

varc=c.split("=");

if(c[0]=="userName"){

varv=c[1];

v=unescape(v);

document.getElementsByName("name")[0].value=v;

break;

}

}

}

read();

cookie的限制:

Thebrowserisexpectedtosupport80cookiesforeachWebserver,Ncookiestotal,andmaylimitcookiesizeto8KBeach.

2:

cookie与Session的关系

区别:

Cookie:

保存在客户端的。

由浏览器维护。

生命周期三个:

-1(默认,只保存在浏览器缓存),0(),+n

Session:

保存在服务器上的。

由服务器来维护。

生命周期,默认为30分钟

联系:

服务器通过名称为JSESSIONID的cookie获取到服务器的上的 Session。

第一次创建Session时返回的响应头

HTTP/1.1200OK

Server:

Apache-Coyote/1.1

Set-Cookie:

JSESSIONID=155A867822972F81E57878763CFDAB85;Path=/201507202/;HttpOnly

Content-Length:

0

Date:

Mon,20Jul201505:

54:

53GMT

以下是自己获取到的SessionID:

HttpSessions=request.getSession();

System.err.println(s.getId());

155A867822972F81E57878763CFDAB85

再次访问服务器时:

request头带有cookie信息:

GET/201507202/oneHTTP/1.1

Accept:

text/html,application/xhtml+xml,*/*

Accept-Language:

en,zh-CN;q=0.5

User-Agent:

Mozilla/5.0(compatible;MSIE9.0;WindowsNT6.1;WOW64;Trident/5.0)

Accept-Encoding:

gzip,deflate

Host:

localhost:

8080

Connection:

Keep-Alive

Cookie:

JSESSIONID=155A867822972F81E57878763CFDAB85

1:

示例

关闭浏览器以后,还可以获取服务器上的Session

保存一个Cookie也叫JSESSIONID=ID

publicclassOneServletextendsHttpServlet{

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

HttpSessions=request.getSession();

if(s.getAttribute("random")==null){

Randomr=newRandom();

inta=r.nextInt(100);

System.err.println("创建随机值:

"+request.getRemoteAddr()+","+a);

s.setAttribute("random",request.getRemoteAddr()+"创建的随机值是:

"+a);

//保存一个与系统重名的cookie

Cookiec=newCookie("JSESSIONID",s.getId());

c.setMaxAge(60*30);

c.setPath(request.getContextPath());

response.addCookie(c);

}

response.setContentType("text/html;charset=UTF-8");

response.getWriter().print(s.getAttribute("random"));

}

3:

实现自动登录

思想:

1:

页面给出一个是否自动登录的checkbox.

2:

如果用户选择了checkbox则保存一个cookie。

就是在里,保存用户名和密码。

如果直接将用户名的密码,保存到coookie中去,很不安全。

所以,应该将用户名的密码,进行md5以后,再保存到cookie中去。

(略)

3:

打开登录页面时,检查是否保存了某个cookie.如果有,则获取cookie中的值,去查询数据库,是否正在。

如果正确,就

将用户的信息放到session中去。

1:

开发一个checkbox

<%

if(session.getAttribute("user")==null){

%>

Name:


pwd:

type="text"name="pwd">
自动登录

value="1"name="auto">

value="登录">

<%

}else{

%>

你好,你已经登录了.退出

<%

}

%>

2:

开发登录的实现

protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

Stringname=request.getParameter("name");

Stringpwd=request.getParameter("pwd");

if(name!

=null&&name.length()>=3){

request.getSession().setAttribute("user",name);

//检查是否用户选择了checkbox

Stringauto=request.getPar

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1