cookie机制

Cookie通过在客户端记录信息确定用户身份

一个用户的所有请求操作都应该属于同一个会话

HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话

cookie机制:

客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

注意:

(1)Cookie具有不可跨域名性

  (2)Cookie的有效期

Cookie的maxAge决定着Cookie的有效期,单位为秒(Second)。Cookie中通过getMaxAge()方法与setMaxAge(int maxAge)方法来读写maxAge属性。

如果maxAge属性为正数,则表示该Cookie会在maxAge秒之后自动失效。浏览器会将maxAge为正数的Cookie持久化,即写到对应的Cookie文件中。无论客户关闭了浏览器还是电脑,只要还在maxAge秒之前,登录网站时该Cookie仍然有效。下面代码中的Cookie信息将永远有效。

Cookie cookie = new Cookie("username","helloweenvsfei");   // 新建Cookie

cookie.setMaxAge(Integer.MAX_VALUE);           // 设置生命周期为MAX_VALUE

response.addCookie(cookie);                    // 输出到客户端

如果maxAge为负数,则表示该Cookie仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该Cookie即失效。maxAge为负数的Cookie,为临时性Cookie,不会被持久化,不会被写到Cookie文件中。Cookie信息保存在浏览器内存中,因此关闭浏览器该Cookie就消失了。Cookie默认的maxAge值为–1。

如果maxAge为0,则表示删除该Cookie。Cookie机制没有提供删除Cookie的方法,因此通过设置该Cookie即时失效实现删除Cookie的效果。失效的Cookie会被浏览器从Cookie文件或者内存中删除,

例如:

Cookie cookie = new Cookie("username","helloweenvsfei");   // 新建Cookie

cookie.setMaxAge(0);                          // 设置生命周期为0,不能为负数

response.addCookie(cookie);                    // 必须执行这一句

response对象提供的Cookie操作方法只有一个添加操作add(Cookie cookie)。

要想修改Cookie只能使用一个同名的Cookie来覆盖原来的Cookie,达到修改的目的。删除时只需要把maxAge修改为0即可。

注意:从客户端读取Cookie时,包括maxAge在内的其他属性都是不可读的,也不会被提交。浏览器提交Cookie时只会提交name与value属性。maxAge属性只被浏览器用来判断Cookie是否过期。

(3)Cookie的修改、删除

Cookie并不提供修改、删除操作。如果要修改某个Cookie,只需要新建一个同名的Cookie,添加到response中覆盖原来的Cookie。

如果要删除某个Cookie,只需要新建一个同名的Cookie,并将maxAge设置为0,并添加到response中覆盖原来的Cookie。注意是0而不是负数。负数代表其他的意义。读者可以通过上例的程序进行验证,设置不同的属性。

注意:修改、删除Cookie时,新建的Cookie除value、maxAge之外的所有属性,例如name、path、domain等,都要与原Cookie完全一样。否则,浏览器将视为两个不同的Cookie不予覆盖,导致修改、删除失败。

例子:

servlet:

package com.bjsxt.cookie.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Cookie:是一个类,
 * 由Servlet创建,并返回少量信息给客户端浏览器并保存
 *  如何给cookie设置存活时间,用jeansCookie.setMaxAge(3600*24*3);//存活时间为3天
 *    保存地点
 *       如果设置了存活时间,将cookie信息对象保存在电脑硬盘上,一旦时间一到,自动销毁
 *       如果没有设置存活时间,将保存在浏览器内存中,一旦浏览器关闭,cookie信息销毁
 *       
 *    怎样查看cookie的存活时间:看Expires属性
 *    怎样查看cookie的访问路径:看Path属性
 *  为了让cookie信息访问 变得合理,可以对cookie对象设置访问机制(url)
 *
 *  cookie技术依赖于客户端---》跟服务器tomcat是没有关系的
 *  
 *  怎样获取到前台传递过来的cookie信息?
 *  
 * @author Administrator
 *
 */
public class CookieServlet extends HttpServlet {
    
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //创建cookie信息对象
        Cookie  clothesCookie=new Cookie("clothes", "KA MA");
        Cookie  jeansCookie=new Cookie("jeans", "YiShion");
        Cookie  shoesCookie=new Cookie("shoes", "Nike");
        
        
        //****:对jeansCookie  cookie对象设置存活时间
        jeansCookie.setMaxAge(3600*24*3);//存活时间为3天
        
        //***:动态的设置cookie的访问路径
        shoesCookie.setPath(req.getContextPath()+"/car");//  "/car"相当于“/car*”
        
        //将cookie返回给客户端
        resp.addCookie(clothesCookie);
        resp.addCookie(jeansCookie);
        resp.addCookie(shoesCookie);
    }

}

时间: 2024-12-16 09:05:08

cookie机制的相关文章

[原创]java WEB学习笔记28: 会话与状态管理Cookie 机制

1.会话与状态管理 1)背景 ① HTTP协议是一种无状态的协议,WEB服务器本身不能识别出哪些请求是同一个浏览器发出的 ,浏览器的每一次请求都是完全孤立的: ② 作为 web 服务器,必须能够采用一种机制来唯一地标识一个用户,同时记录该用户的状态: ③ 问题:怎么才能实现网上商店中的购物车呢:某个用户从网站的登录页面登入后,再进入购物页面购物时,负责处理购物请求的服务器程序必须知道处理上一次请求的程序所得到的用户信息. 2)会话和会话状态 ① WEB应用中的会话:指一个客户端浏览器与WEB服务

cookie机制和session机制的区别

一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案.同时我们也看到,由于才服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上还有其他选择 二.会话cookie和持久cookie的区别 如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了.这种生命期为浏览会

初识JSP之Cookie机制

http协议的无状态性 我们在进行web应用程序开发的时候,使用的是HTTP协议来传输数据,但是这个Http协议有个先天性的不足,也就是无状态,它无法对用户的状态进行保存管理.所谓的无状态就是是指,当浏览器发送请求给服务器的时候,服务器响应客户端请求,但是当同一个浏览器再次发送请求给服务器的时候,服务器并不知道它就是刚才的那个浏览器.简单地说,就是服务器不会去记得你.所以称作无状态协议. 由于HTTP协议是无状态的协议.一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连

cookie机制与session机制的区别

一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案.同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上还有其他选择. 二.会话cookie和持久cookie的区别 如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了.这种生命期为浏

Cookie机制 和 session 机制

先简单介绍下 cookie机制采用的是在客户端保持状态的方案 session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上它还有其他选择 客户端保留服务端的sessioID 正统的cookie分发是通过扩展HTTP协议来实现的 服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie 纯粹的客户端脚本如JavaScript也可以生成cookie cookie的内容主要包括:名字,值,过期时间,路径和域. 若不设置过期时间,则表示这个cookie

php session机制与cookie机制以及联系与区别

session与cookie是在做项目中很常用的会话技术,session与cookie也是面试中被问到频率最高的问题,有一次我去面试,面试官就怼着我session与cookie一直问(头都大了),下面总结了一些关于session与cookie的区别与联系. 说到session与cookie,先说一下什么是会话技术: 由于http协议是无状态的协议,也就是说当一个用户在请求一个页面后再请求另一个页面时,http将无法告诉我们这两个请求是否来自于同一个用户,这就意味着我们需要有一种机制来跟踪和记录用

HTTP Session、Cookie机制详解

一.什么是http session,有什么用 HTTP协议本身是无状态的,本身并不能支持服务端保存客户端的状态信息,于是,Web Server中引入了session的概念,用来保存客户端的状态信息. 这 里用一个形象的比喻来解释session的工作方式.假设Web Server是一个商场的存包处,HTTP Request是一个顾客,第一次来到存包处,管理员把顾客的物品存放在某一个柜子里面(这个柜子就相当于Session),然后把一个号码牌交给这个顾 客,作为取包凭证(这个号码牌就是Session

客户端识别和cookie机制

HTTP最初是一个匿名的.无状态的请求,服务器处理来自客户端的请求,然后向客户端回送响应,web服务器几乎没有什么信息来判定是哪个用户发送的请求,也无法记录用户的请求序列,以下有几种方法来增加用户识别机制: 第一.HTTP首部 1.from首部:包含了E-mail地址 2.User-Agent:包含了浏览器相关信息,包括程序的名称和版本, 3.Referer:提供了用户来源页面的URL 第二.客户端的IP地址: 通过TCP链接得到IP地址,存在的问题: 客户端IP地址描述的所用的机器,而不是用户

JavaWeb学习总结第五篇--认识Cookie机制

Cookie机制 前言 会话跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie和Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份.今天,我首先给大家讲解一下Cookie机制,后面我会给大家提到Session的. 什么是Cookie Web应用程序是使用HTTP协议传输数据的.HTTP协议是无状态的协议.一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要新的连接.这就意味着服务器无法从