第二十二天 http状态管理技术-cookies和session

来源:互联网 发布:淘宝生鲜都发空运吗 编辑:程序博客网 时间:2024/06/10 03:26

1.http状态管理

a.为什么要对http协议进行状态管理?

因为http协议是一个无状态的协议,优点是可以利用有限的资源对多个客户方服务。

但是,对于特定的应用,比如说购物系统,需要记录客户端的状态,此时,需要对http协议进行状态管理。

b.如何进行状态管理?

  1.在客户端保存用户的状态,即将用户的状态保存在服务器端,即cookie技术;

  2.在服务器端保存用户的状态,即将用户的状态保存在服务器端,即session技术;

2.cookie技术

1.什么是cookie技术?

浏览器访问某个服务器时候,服务器会创建一部分数据,在响应数据包中以消息头set-session的形式发送给浏览器,浏览器会将这部分数据保存下来。

当浏览器再次访问服务器的时候,会将这部分数据发送给服务器。通过这种方式,服务器可以维护用户的状态。

a.用法:

Cookie cookie=new Cookie(String name,String value);

response.addCookie(cookie);

cookie的生存时间,在默认的情况下,cooki会保存在内存当中,所以当浏览器关闭的时候,cookie会丢失。

但是我们可以设置cookie的生存时间,cookie.setMaxAge(int seconds);

second>0的时候:浏览器关闭,cookie会以文件的方式保存在硬盘上

second=0的时候:删除

second<0的时候:默认的方式,浏览器关闭,cookie会保存在内存;

b.编码问题:

cookie的值只能是Ascii字符,所以对于中文,可以将其转换成ascii字符。我们可以在保存cookie的值时,使用String URLEncoding.encode("张三",“utf-8”);

读取的时候,URLDecoder.decoder();

c.查询:

Cookie[] cookies=request.getCookie();

如果找不到任何的cookie,返回null

cookie.getName()获取cookie的名称

cookie.getValue()获取cookie的值

d.路径问题:

在创建cookie时候,都有一个默认的path,该值是创建该cookie的组件的地址。

此时,该path是 从应用名(也就是工程名)前面的‘’/‘’开始.

当浏览器访问服务器时候,会比较要访问的地址是否小于等于path,如果小于会把cookie携带给服务器;

d.1 我们可以修改path,使用cookie.setPath("  ")来修cookie的path

比如:cookie.setPath("/工程名"),那么访问工程名下的所有Servlet的时候,都会携带这个cookie

cookie.setPath("/")访问服务器所有的应用的时候,都会携带对应的cookie。

d.2我们还可以修改cookie域,比如:cookie.setDomain(".abc.com");那么浏览器会比较要访问的地址的

域名是否匹配,然后再比较path

e.cookie的限制

e.1 cookie只保存字符串,并且对于中文,需要编码。

e.2cookie的个数也有限制,本地的最大数量大约为300个左右

e.3cookie的大小也有限制(4k左右)

e.4cookie不是很安全

e.5cookie可以被用户禁止


使用的场合:记录用户的登录习惯。网页换肤。自动登录。购物车






阅读全文
0 0