java学习笔记—会话1(25)

会话就是在一个网站访问开始到一个网站访问结束直接的整个过程称之为会话。

因为在整个会话过程中需要有一些重点的数据进行存储。如果没有会话技术那么这些信息是无法进行存储的。

java学习笔记—会话1(25)

在以上的购物网站访问过程中需要将用户的购买的每一个商品的ID存储在会话中,以便在结算的页面那种获取到购买商品的价格信息。即:可以使用会话技术存储会话数据。

Cookie技术

Cookie技术主要是一种使用客户端存储技术来记录会话中需要记录的数据。该数据由服务器创建和发送给浏览器,浏览器使用缓存文件技术将信息以文件的方式进行本地存储。当下一次需要改数据的时候,浏览器在发送请求的时候会自动携带该数据文件提交给服务器。

1  常用的API

创建Cookie对象

Cookie(String name, String value)     以指定数据创建Cookie对象

设置Cookie对象

void setMaxAge(int expiry)              设置Cookie的最大有效时间

void setPath(String uri)                  设置Cookie的有效路径

void setDomain(String pattern)         设置Cookie的有效域

发送Cookie对象

void addCookie(Cookie cookie)         发送Cookie对象

获取Cookie对象

Cookie[] getCookies()                 获取用户请求中的Cookie数组

获取Cookie中携带信息

int getMaxAge()                      获取Cookie的最大有效时间

String getName()                      获取Cookie的名字

String getValue()                      获取Cookie存储的值

String getDomain()                  获取Cookie的有效域

String getPath()                     获取Cookie的有效路径

Cookie的写和读

1. 写Cookie

public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

        // 创建Cookie对象

        Cookie cookie = new Cookie("name","jack");

        // 设置Cookie对象

        cookie.setMaxAge(5*60);

        // 发送Cookie对象

        response.addCookie(cookie);

    }

Tomcat使用Set-Cookie: name=jack; Expires=Wed, 16-Jan-2014 06:42:34 GMT响应头信息发送给浏览器一个Cookie对象。

打开浏览器在缓存文件夹中发现一个文件,打开如下

name                 Cookie名

jack                     Cookie值

localhost/         网站的路径

1536     Cookie的标识

1537    

2856724736

30274484

4152152032

30274483

*                     结束标记

2. 读Cookie信息

public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

        // 获取Cookie数组对象

        Cookie[] cookies = request.getCookies();

        // 循环

        for(Cookie cookie:cookies){

            // 获取Cookie数据

            System.out.println(cookie.getName());

            System.out.println(cookie.getValue());

            System.out.println(cookie.getMaxAge());

            System.out.println(cookie.getPath());

            System.out.println(cookie.getDomain());

        }

}

浏览器发送读取请求的时候默认带有效的Cookie,以Cookie: name=jack请求头带Cookie数据,那么服务器端就可以直接进行数据的获取。

name             获取Cookie名

jack             获取Cookie值

-1                 获取的有效时间  -1代表浏览器关闭的时候销毁该Cookie

null

null

浏览器不会将过期的Cookie对象发送给服务器。

3 读和写多个Cookie

如果给客户端输出多个Cookie对象,那么服务器会创建多个

Set-Cookie: name=jack; Expires=Wed, 16-Jan-2014 07:02:01 GMT

Set-Cookie: password=root; Expires=Wed, 16-Jan-2014 07:02:01 GMT头字段进行Cookie的发送。

多个Cookie在浏览器缓存中以一个文件的形式进行存储。

浏览器使用一个Cookie: name=jack; password=root带多个Cookie数据。

4  Cookie有效路径

以上的代码在第一次写回Cookie后,如果后面继续请求该网站的其他资源,那么还会继续携带Cookie对象直到Cookie过期。但是如果访问不同网站那么不带该Cookie。

cookie2.setPath("/read");

Set-Cookie: password=root; Expires=Wed, 16-Jan-2014 07:25:06 GMT; Path=/day08/read

存储的时候由于两个Cookie的有效路径不同,因此存储在不同的Cookie文件中。

但是指定有效路径的Cookie文件中多了有效路径的值。

password

root

localhost/read

但是如果现在需要在不同的网站中传递Cookie对象,那么如何指定有效路径。

cookie2.setPath("/");   ->指定Cookie的有效路径是tomcat的webapps目录

5  Cookie的跨域

假定A服务器上发布一个网站叫CMS系统,域名www.sina.com.cn

在CMS系统中可以直接编写一个写Cookie的Servlet。但是要设置该Cookie的有效域。

cookie.setDomain(“.163.com”);

假定B服务器上发布一个网站叫IT系统,域名www.163.com

编写一个获取Cookie数据的Servlet进行Cookie的数据读取。

总结:

  1. 可以实现自动登录。用户名和密码默认是明码的。开发者需要自定义加密。Md5 Base64
  2. 购物车的商品ID信息
  3. 存储用户上次的登录时间

你可能感兴趣的:(Java学习)