Cookie会话

 什么是会话?

     在日常生活中,从拨通电话到挂断电话之间的一连串的你问我答的过程就是一个会话。

       会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。

l      会话过程中要解决的一些问题?

       每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,服务器要想办法为每个用户保存这些数据。

       例如:多个用户点击超链接通过一个servlet各自购买了一个商品,服务器应该想办法把每一个用户购买的商品保存在各自的地方,以便于这些用户点结帐servlet时,结帐servlet可以得到用户各自购买的商品为用户结帐。

 

Cookie的应用:

 

l      Cookie

       Cookie是客户端技术,服务器把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。

TipCookie技术

浏览器

服务器

servlet1

servlet2

Set-Cookie2: name=洗衣机

Set-Cookie2: name=洗衣机

name=洗衣机

IE缓存区

cookie: name=洗衣机

cookie: name=洗衣机

.

 

l      什么是cookie

l       

l       

l      Cookie是一种在客户端保持HTTP状态信息的技术,它好比商场发放的优惠卡。

l      Cookie是在浏览器访问WEB服务器的某个资源时,由WEB服务器在HTTP响应消息头中附带传送给浏览器的一片数据,WEB服务器传送给各个客户端浏览器的数据是可以各不相同的。

l      一旦WEB浏览器保存了某个Cookie,那么它在以后每次访问该WEB服务器时,都应在HTTP请求头中将这个Cookie回传给WEB服务器。

l      WEB服务器通过在HTTP响应消息中增加Set-Cookie响应头字段将Cookie信息发送给浏览器,浏览器则通过在HTTP请求消息中增加Cookie请求头字段将Cookie回传给WEB服务器。

 

  传送示意图:

 

Cookie的传送过程示意图  

第一次访问不存在

Server1Cookie

 

写入Server1

Cookie

第一次响应

Set-Cookie2: name=value

 

第一次访问请求

 

 

 

 

 

 

WEB

Server1

 

 

 

 

WEB

Server2

 

 

 

 

浏览器

 

Server1

Cookie

 

Server2

Cookie

Cookie存储区

 

后续访问存在

Server1Cookie

 

后续访问请求

Cookie: name=value

 

 

 

CookieAPI

 

l      javax.servlet.http.Cookie类用于创建一个Cookieresponse接口也中定义了一个addCookie方法,它用于在其响应头中增加一个相应的Set-Cookie头字段。同样,request接口中也定义了一个getCookies方法,它用于获取客户端提交的CookieCookie类的方法:

ü     public Cookie(String name,String value)

ü     setValuegetValue方法

ü     setMaxAgegetMaxAge方法

ü     setPathgetPath方法

ü     setDomaingetDomain方法

ü     getName方法

Set-Cookie:username=qiujy;Domain=localhost;path=/

Cookie:username=qiujy;$Path=/jsp_04_servlet

 

 

Cookie的细节问题:

 

l      一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)。

l      一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储多个WEB站点提供的Cookie

l      浏览器一般只允许存放300Cookie,每个站点最多存放20Cookie,每个Cookie的大小限制为4KB

l      如果创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie(即存储在浏览器的内存中),用户退出浏览器之后即被删除。若希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。将最大时效设为0则是命令浏览器删除该cookie

l      注意,删除cookie时,path必须一致,否则不会删除

 

 

 

 

package cn.csdn.cookie;

 

import java.io.IOException;

import java.io.PrintWriter;

 

import javax.servlet.ServletException;

import javax.servlet.http.Cookie;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

public class CookieHellow extends HttpServlet {

 

   public voiddoGet(HttpServletRequest request, HttpServletResponse response)

         throwsServletException, IOException {

     

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

       PrintWriter out = response.getWriter();

       Cookie [] cookies = request.getCookies();

       for(int i=0;cookies!=null &&i<cookies.length;i++){

          out.print(cookies[i].getValue());

       }

         CreateCookie(response);

   }

 

   private voidCreateCookie(HttpServletResponse response) throws IOException {

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

         PrintWriter out = response.getWriter();

      //1.在服务器创建一个cookie

      Cookie cookie=new Cookie("username","weimingwei");

      //设置cookie的存活时间,如果不设置,将不存在

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

      //cookie写到客户端呵呵呵

      response.addCookie(cookie);

      out.print("我已经进来了  哈哈哈哈   ");

   }

 

   public voiddoPost(HttpServletRequest request, HttpServletResponse response)

         throwsServletException, IOException {

 

      doGet(request,response);

   }

 

}

 

 

 

 

 

package cn.csdn.cookie;

 

import java.io.IOException;

import java.io.PrintWriter;

import java.util.Date;

 

 

 

import javax.servlet.ServletException;

import javax.servlet.http.Cookie;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

public class AccessTime extends HttpServlet {

 

   public voiddoGet(HttpServletRequest request, HttpServletResponse response)

         throwsServletException, IOException {

      //获取客户的cookie信息

       

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

       PrintWriter out = response.getWriter();

       out.print("您上次访问的时间是:");

       Cookie [] cookies = request.getCookies();

       for(int i=0;cookies!=null &&i<cookies.length;i++){

         if(cookies[i].getName().equals("lastAccessTime")){

             long value=Long.parseLong(cookies[i].getValue());

             Date date = new Date(value);

             out.print(date.toLocaleString());

         }

       }

       //把新的访问时间写给客户,保存到Cookie

       Cookie cookie = newCookie("lastAccessTime",System.currentTimeMillis()+"");

       cookie.setMaxAge(30*20*3600);

       

       

       cookie.setPath("/WebDemo");

       

       

       

       response.addCookie(cookie);

   }

  

   public voiddoPost(HttpServletRequest request, HttpServletResponse response)

         throwsServletException, IOException {

 

      doGet(request,response);

   }

 

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值