会话管理之Cookie

来源:互联网 发布:centos net snmp 安装 编辑:程序博客网 时间:2024/05/21 08:44

1.会话控制

HTTP协议有两大缺点:

1.无状态

利用cookie和session的技术可以解决无状态的问题

  • 服务器不能区分 不同浏览器 不同用户发送的 不同请求

  • 不能知道多次请求是否发送自一个用户

2.纯文本

利用BeanUtils可以解决纯文本的问题,将文本封装到对象里。

服务器不能通过HTTP请求报文来识别浏览器,但是我们又有这个需求

(Http无状态的连接,不能满足现状的上网需求)

电影院的运作:

1.电影院要创建票

2.将电影票发给顾客

3.顾客带着票去看电影

4.电影院要检票

[1] Cookie

  • Cookie就是一个头

服务器以响应头的形式将Cookie发送给浏览器,

response.addCookie(),该方法可以将cookie发送给浏览器

浏览器以请求头的形式将Cookie发回给服务器,request.getCookies(),

该方法可以获得浏览器端的cookies数组。

  • Cookie的流程:

1.服务器创建Cookie

2.将Cookie发送给浏览器

3.浏览器带着Cookie来访问服务器

4.服务器检查浏览器的Cookie

  • 服务器通过响应报文将Cookie发送给浏览器,具体格式如下:

Set-Cookie: username=sunwukong

浏览器收到该响应头以后,会自动保存Cookie信息,并在以后的访问中携带该Cookie:

Cookie: username=sunwukong; age=18

使用Cookie

  • 创建Cookie

Cookie cookie = new Cookie(name,value);

  • 发送Cookie

response.addCookie(cookie);

  • 读取Cookie
Cookie[] cookies = request.getCookies();//判断cookies是否为nullif(cookies!=null){//遍历Cookiefor(Cookie cookie : cookies){String name = cookie.getName();String value = cookie.getValue();}}
  • 修改Cookie

Cookie一旦发送给浏览器,那么服务器将不能直接修改。

但是可以通过使用同名Cookie来替换浏览器已有的Cookie的方式,来间接的修改。

浏览器收到新Cookie以后,就会将老的Cookie销毁,然后使用新的Cookie

  • 删除Cookie

删除Cookie指使浏览器不在保存Cookie,使Cookie立即失效

//使name为username的Cookie立即失效

//1.创建一个name为username的Cookie

Cookie cookie = new Cookie(“username”, “aaa”);

//2.设置Cookie的有效时间为0

cookie.setMaxAge(0);

//3.将cookie发送给浏览器,来替换同名Cookie

response.addCookie(cookie);

Cookie的有效时间

Cookie发送个浏览器以后,浏览器是不会永久保存,也就是到了一定的时间以后浏览器会自动销毁Cookie

下次访问服务器时Cookie将不再被携带

Cookie的默认有效时间为一次会话(一次打开关闭浏览器的过程)

同样我们也可以手动指定Cookie的有效时间

cookie.setMaxAge(秒数);

//setMaxAge用来设置Cookie的最大有效时间,需要int型的参数,代表有效的秒数

//当参数大于0时,会设置为指定的秒数

//cookie.setMaxAge(30);

//当参数等于0时,浏览器不会保存Cookie

//cookie.setMaxAge(0);

//当参数小于0时,和不设置是一样,当前会话有效

cookie.setMaxAge(-100);

//设置一个永久有效的Cookie

cookie.setMaxAge(60*60*24*365*10);

Cookie的Path

path指路径,指浏览器在访问哪些地址时该Cookie有效

也就是说Cookie默认的path是servlet项目的根目录

//同样我们也可以手动指定Cookie的路径

//Cookie路径由浏览器解析,所以需要加上项目名

//11_WEB_Cookie/hello 指名凡是访问项目根目录下hello路径下Cookie都有效

cookie.setPath(“/11_WEB_Cookie/hello”);

Cookie的应用:

1.保持用户的登录状态

  • 将用户的信息保存到Cookie中,并发送给浏览器,并且有效时间设置一个较长的时间。

  • 浏览器在以后访问访问网站时,都会带着Cookie,服务器不在需要用户直接输入用户名和密码等信息

  • 而是从Cookie中读取。

  • Cookie是纯文本的格式,很容易被截获,所以我们在使用Cookie保存敏感信息时一般都需要进行加密。

2.baidu广告的精确推送

我们在使用百度搜索时,他会将我们搜索关键字之类的信息保存到Cookie中,当我们访问带有百度广告的链接时,该Cookie信息会自动发送给Baidu,百度就可以根据Cookie的信息给你推送广告。

3.Taobao目前保存用户名,也就是再次登录时不再需要输入用户名,只需要输入密码。

  • 模拟一下taobao的功能:

1.一旦用户登录成功以后,下次在登录时,直接将用户名显示出来,用户不需要再次输入用户名,只输入密码即可。

  • 用户先在login.jsp输入用户名和密码,将请求提交给LoginServlet

  • LoginServlet检查用户名和密码是否正确,

如果正确:则将用户名保存到一个有效期7天的Cookie中,并发送给浏览器

然后重定向到login-success.jsp

登录失败:暂时不考虑,默认登录成功

- 下次浏览器在访问网站时,直接将Cookie中的用户名读取并在表单中回显<!-- EL中有一个cookie隐含对象,它里边保存的是一个Map<String key , Cookie value>key实际上就是cookie的name属性value就是Cookie本身 -->

Cookie本身也是一个键值对的形式< String name,String value>

获取指定name的cookie的value值。

${cookie.user.value},其中user是cookie的name。

0 0
原创粉丝点击