`

cooike 的原理 java

阅读更多

一 cooike 原理

实际上,Cookie的作用就是与服务器互动。 

用户登录:在很多网站的登录页面中都可以看到一个Cookie选项,多用于询问用户在多 长时间不需要再登录,如一天、一个月或一年等。这就需要使用Cookie技术,在用户第 一次登录时,使用Cookie记录下了用户的信息,并让其保存一天、一个月或一年。只要 Cookie没有过期,那么用户在下次访问需要身份验证时,就会通过Cookie将信息传递到 服务器上,避免了用户的重复登录。 

电子商务:在电子商务中使用最多的就是购物车和最近浏览过的商品。这两项都使用了 Cookie技术。当用户看到需要购买的商品时,浏览器可以将这些商品的信息写在Cookie 中,此时的Cookie相当于购物车,只不过购物车中存放的不是商品,而是商品的信息。 在用户最后结账时,可以将所有的商品信息从Cookie中取出,统一付款。最近浏览过的 商品的处理方式相同,也是将用户最近浏览过的商品信息存放在Cookie中,当用户下次 再访问该电子商务网站时,可以看到自己上次浏览过哪些商品。 

在电子商务中,使用Cookie还可以将购物做得更人性化例如,通过Cookie记录用户浏览 过的商品信息,再通过分析这些商品的共性来为用户推荐相关商品。 

博客:博客是目前网络中流行的网络日记。不同的用户都可以在博客中发表文章,也可 以装饰自己的博客风格,如背景颜色、文字大小等。这些都可以先写在Cookie中,在用 户确定之后,才一次性提交到服务器上。

 

Cookie的主要作用是在客户端和服务器端之间传递信息。Cookie中最重要的参数为Cookie名和Cookie值,除此之外,还有用于设置生存期的expires、用于设置路径的path、用于设置域的domain和用于设置安全性的 secure也是Cookie中的参数。 

1.创建或修改一个Cookie的语法代码如下所示: 

document.cookie = "name=value" 

在以上代码中,name为Cookie名,value为Cookie值。如果要创建多个Cookie,可以多次使用以上代码。使用Document对象的cookie属性,也可以读取Cookie文件中的Cookie信息。如以下代码所示: 

var cookies = document.cookie 

在以上代码中,cookies为变量名,document.cookie可以取得整个Cookie文件中的信息,因此,变量cookies有可能会包括多个Cookie的信息。 

 

2.Cookie的生存期,也称为Cookie的有效期或失效期,即Cookie可以保持的时间。在默认情况下,Cookie在浏览器窗口关闭的时候会自动失效,不能再被访问,但可以通过expires来设置Cookie的生存期。其语法代码如下所示: 

document.cookie = "name=value; expires=date" 

 

3. 在默认情况下,只有与创建Cookie的网页在同一个虚拟目录或子虚拟目录下的网页才可以访问该Cookie。如果想要让虚拟目录的父级和父级以上目录下的文件可以访问当前文件所创建的Cookie,那么就需要设置Cookie的路径。其语法代码如下所示: 

document.cookie = "name=value; path=path" 
document.cookie = "name=value; expires=date;path=path" 
Eg: 
document.cookie = "cookieUserName=" + userName + ";path=/"; 
document.cookie = "cookieUserPassword="+userPassword; 

 

4. 例如,www.aspxfans.com下文件创建的Cookie就不能被book.aspxfans.com下的文件访问。如果想要让不同域中的文件互相访问Cookie,就必须要设置Cookie的域,其语法代码如下所示: 

document.cookie = "name=value; path=path;domain=domain" 
Eg: 
document.cookie = "cookieUserName=" + userName + ";path=/;domain:.aspxfans. 
com"; 
document.cookie = "cookieUserPassword="+userPassword; 

 

5. 在Cookie中设置secure,就可以要求浏览器使用加密的传输协议传输Cookie。如果传输协议不是加密协议,那么该Cookie将不会被传输。secure的语法代码如下所示: 

document.cookie = "name=value; secure" 

 

6. 一个网页可以创建多个Cookie,但多个Cookie可能会放在同一个cookie文件中。 

每个Cookie所存放的数据不能超过4KB。 

每个Cookie文件中存储的Cookie个数不能超过300个。 

每个域可以创建的Cookie文件不能超过20个。 

浏览器可以通过设置来接受或拒绝访问Cookie 

 

7. 判断客户端是否禁用了cookie 

var c="jscookietest=valid"; 
document.cookie=c; 
if(document.cookie.indexOf(c)==-1) 
location="html/zh-CN/nocookies.html"; 
//不支持Cookie 

 

8. 正常的cookie只能在一个应用中共享,即一个cookie只能由创建它的应用获得。 

1.可在同一应用服务器内共享方法:设置cookie.setPath("/"); 

    本机tomcat/webapp下面有两个应用:cas和webapp_b, 

    1)原来在cas下面设置的cookie,在webapp_b下面获取不到,path默认是产生cookie的应用的路径。 

    2)若在cas下面设置cookie的时候,增加一条cookie.setPath("/");或者cookie.setPath("/webapp_b/");就可以在webapp_b下面获取到cas设置的cookie了。 

    3)此处的参数,是相对于应用服务器存放应用的文件夹的根目录而言的(比如tomcat下面的webapp),因此cookie.setPath("/");之后,可以在webapp文件夹下的所有应用共享cookie,而cookie.setPath("/webapp_b/");是指cas应用设置的cookie只能在webapp_b应用下的获得,即便是产生这个cookie的cas应用也不可以。 

    4)设置cookie.setPath("/webapp_b/jsp")或者cookie.setPath("/webapp_b/jsp/")的时候,只有在webapp_b/jsp下面可以获得cookie,在webapp_b下面但是在jsp文件夹外的都不能获得cookie。 

    5)设置cookie.setPath("/webapp_b");,是指在webapp_b下面才可以使用cookie,这样就不可以在产生cookie的应用cas下面获取cookie了 

    6)有多条cookie.setPath("XXX");语句的时候,起作用的以最后一条为准。 

    6)设置多个path的方法??? 


2.跨域共享cookie的方法:设置cookie.setDomain(".jszx.com"); 

    A机所在的域:home.langchao.com,A有应用cas 

    B机所在的域:jszx.com,B有应用webapp_b 

    1)在cas下面设置cookie的时候,增加cookie.setDomain(".jszx.com");,这样在webapp_b下面就可以取到cookie。 

    2)这个参数必须以“.”开始。 

    3)输入url访问webapp_b的时候,必须输入域名才能解析。比如说在A机器输入:http://lc-bsp.jszx.com:8080/webapp_b,可以获取cas在客户端设置的cookie,而B机器访问本机的应用,输入:http://localhost:8080/webapp_b则不可以获得cookie。 

    4)设置了cookie.setDomain(".jszx.com");,还可以在默认的home.langchao.com下面共享。

 

 

.java对cookie的操作比较简单,主要介绍下建立cookie和读取cookie,以及如何     设定cookie的生命周期和cookie的路径问题。

 

建立一个无生命周期的cookie,即随着浏览器的关闭即消失的cookie,代码如下

/**
 * 根据名字获取cookie
 * @param request
 * @param name cookie名字
 * @return
 */
public static Cookie getCookieByName(HttpServletRequest request,String name){
    Map<String,Cookie> cookieMap = ReadCookieMap(request);
    if(cookieMap.containsKey(name)){
        Cookie cookie = (Cookie)cookieMap.get(name);
        return cookie;
    }else{
        return null;
    }   
}
 
/**
 * 将cookie封装到Map里面
 * @param request
 * @return
 */
private static Map<String,Cookie> ReadCookieMap(HttpServletRequest request){  
    Map<String,Cookie> cookieMap = new HashMap<String,Cookie>();
    Cookie[] cookies = request.getCookies();
    if(null!=cookies){
        for(Cookie cookie : cookies){
            cookieMap.put(cookie.getName(), cookie);
        }
    }
    return cookieMap;
}

下面建立一个有生命周期的cookie,可以设置他的生命周期

cookie = new Cookie("cookiename","cookievalue");
 
cookie.setMaxAge(3600);

//设置路径,这个路径即该工程下都可以访问该cookie 如果不设置路径,那么只有设置该cookie路径及其子路径可以访问

cookie.setPath("/");
response.addCookie(cookie);

下面介绍如何读取cookie,读取cookie代码如下

Cookie[] cookies = request.getCookies();//这样便可以获取一个cookie数组
for(Cookie cookie : cookies){
    cookie.getName();// get the cookie name
    cookie.getValue(); // get the cookie value
}
 

上面就是基本的读写cookie的操作。我们在实际中最好进行一下封装,比如增加一个cookie,我们关注的是cookie的name,value,生命周期,所以进行封装一个函数,当然还要传入一个response对象,addCookie()代码如下

 /**

 * 设置cookie
 * @param response
 * @param name  cookie名字
 * @param value cookie值
 * @param maxAge cookie生命周期  以秒为单位
 */
public static void addCookie(HttpServletResponse response,String name,String value,int maxAge){
    Cookie cookie = new Cookie(name,value);
    cookie.setPath("/");
    if(maxAge>0)  cookie.setMaxAge(maxAge);
    response.addCookie(cookie);
}

读取cookie的时候,为了方便我们的操作,我们希望封装一个函数,只要我们提供cookie的name,我们便可以获取cookie的value,带着这个想法,很容易想到将cookie封装到Map里面,于是进行下面的封装

/**
 * 根据名字获取cookie
 * @param request
 * @param name cookie名字
 * @return
 */
public static Cookie getCookieByName(HttpServletRequest request,String name){
    Map<String,Cookie> cookieMap = ReadCookieMap(request);
    if(cookieMap.containsKey(name)){
        Cookie cookie = (Cookie)cookieMap.get(name);
        return cookie;
    }else{
        return null;
    }   
}
 
/**
 * 将cookie封装到Map里面
 * @param request
 * @return
 */
private static Map<String,Cookie> ReadCookieMap(HttpServletRequest request){  
    Map<String,Cookie> cookieMap = new HashMap<String,Cookie>();
    Cookie[] cookies = request.getCookies();
    if(null!=cookies){
        for(Cookie cookie : cookies){
            cookieMap.put(cookie.getName(), cookie);
        }
    }
    return cookieMap;
}
分享到:
评论

相关推荐

    Java 模拟cookie登陆简单操作示例

    Java 模拟Cookie 登陆简单操作示例 在本文中,我们将介绍 Java 模拟 Cookie 登陆的简单操作,结合实例...本示例可以帮助开发者快速了解 Java 模拟 Cookie 登陆的实现原理和实现方法,为实际开发中提供了有价值的参考。

    aaaaaa.zip_cookie_cookie java_java cookie

    Cookie的工作原理是服务器在客户端(用户的浏览器)上存储一小段文本信息,当用户再次访问该网站时,浏览器会自动将这些信息回传到服务器,从而实现数据的持久化。标题"aaaaaa.zip_cookie_cookie java_java cookie...

    JAVA100例之实例81Cookie计数器

    在Java编程中,Cookie是一种非常重要的技术,它...这个实例简单直观,适合初学者理解Cookie的工作原理以及如何在Java Web应用中使用它们。通过不断实践和深入学习,开发者可以掌握更多关于Cookie和Web开发的高级技巧。

    discuz与java通过cookie共享登陆

    在这个场景下,我们需要理解Cookie的工作原理以及如何在两个不同的技术栈之间进行会话管理。 首先,Cookie是服务器在用户的浏览器上存储的小型文本文件,通常用于跟踪用户的状态,如登录信息。当用户访问支持Cookie...

    java 基于 Cookie 的 SSO 中间件 kisso 低代码

    在Java环境中,实现SSO的一个常见方式是通过Cookie。Kisso是一个基于Cookie的轻量级SSO中间件,它简化了SSO的实施过程,尤其是对于那些不熟悉复杂认证流程的开发者来说,Kisso的低代码特性使其变得更加友好。 Kisso...

    java操作cookie

    总之,Java中的Cookie操作涉及了服务器与客户端之间的交互,理解其创建、读取、更新和删除的原理对于Web应用的开发至关重要。同时,注意处理好编码问题,以防止乱码现象的发生。通过以上介绍,你应该对Java操作...

    用java运用cookie和session

    在Java Web开发中,Cookie和Session是两种常用的技术,用于管理客户端和服务器之间的会话状态。它们在实现用户登录状态保持、个性化设置保存等方面发挥着重要作用。本篇将深入探讨如何在Java中有效地运用Cookie和...

    javaweb之cookie和session的应用

    本文将深入探讨Cookie和Session的工作原理、应用场景以及如何在Java Web项目中进行有效利用。 **Cookie** Cookie是由服务器端发送到客户端(浏览器)的一小段文本信息,用于在客户端和服务器之间传递状态信息。它...

    Cookie与Session机制

    Cookie的工作原理 当用户首次访问一个网站时,服务器可以通过响应头发送一个或多个Cookie到客户端。这些Cookie通常包括一些键值对,例如用户ID、登录状态等。浏览器会在后续对该网站的请求中自动附带这些Cookie,...

    cookie原理解析

    同时,Cookie 也可以用于记录用户访问次数,例如 Java 中把 Cookie 封装成了 javax.servlet.http.Cookie 类。服务器通过操作 Cookie 类对象对客户端 Cookie 进行操作。通过 request.getCookie() 获取客户端提交的...

    cookie机制实现登陆、退出

    在Web开发中,Cookie是一种非常重要的技术,它用于在客户端和服务器之间传递状态信息。Cookie机制主要用于实现用户登录...在`cookie_demo`这样的项目中,开发者可以学习和实践这些概念,以加深对Cookie工作原理的理解。

    sso的原理与java实现

    本文将深入探讨SSO的原理以及如何在Java环境中实现它。 ### SSO的原理 1. **票据概念**:在SSO中,票据(Ticket)是验证用户身份的关键。当用户成功登录到认证中心(Authentication Center,通常称为CAS)时,CAS...

    java Session cookie

    Java Session Cookie是Web开发中重要的用户状态管理工具,理解其工作原理和使用方法对于优化应用性能和提高用户体验至关重要。在实际开发中,需要根据项目需求权衡Cookie和Session的使用,合理设计和管理Session ...

    Java接口测试Cookie与token原理解析

    Java接口测试Cookie与token原理解析 Java接口测试Cookie与token原理解析是指在Java接口测试中,Cookie和token机制的应用和原理分析。在本文中,我们将详细介绍Cookie和token机制的测试机制,并通过示例代码展示了...

    documentCookie的使用

    **知识点详解** 1. **什么是Cookie** Cookie是由Web服务器在用户的浏览器上...同时,随着Web技术的发展,虽然现代Web应用更多地依赖于HTTP会话和localStorage等技术,但理解Cookie的工作原理仍然对开发者很有帮助。

    JavaWeb 中Cookie实现记住密码的功能示例

    下面我们将深入探讨Cookie的工作原理、优势以及如何在JavaWeb中利用它来实现记住密码的功能。 **一、什么是Cookie** Cookie是由服务器发送到用户的浏览器并存储在本地硬盘上的小型文本文件。当用户再次访问同一...

    java 中cookie的详解及简单实例

    在Java Web开发中,Cookie是一种常见的技术,用于在客户端存储数据。它的工作原理是服务器将数据以键值对的形式发送给浏览器,浏览器将其保存在本地,并在后续的请求中自动发送回服务器。以下是对Java中Cookie的详细...

    web技术之cookie讲解

    本文将深入探讨Cookie的基本概念、工作原理、用途以及在Java中的实现。 首先,Cookie是由服务器端发送到用户浏览器并存储在本地的一小段数据。每当用户访问同一服务器时,浏览器会自动将这些Cookie发送回服务器,...

    Cookie的应用例子

    在Java编程中,Cookie是通过HttpServletResponse接口的addCookie方法设置,而通过HttpServletRequest接口的getCookies方法读取。下面将详细讲解Cookie的工作原理、如何使用以及一些实际应用案例。 一、Cookie工作...

    cookie记住账号密码

    - **服务器端处理**:在服务器端,如使用Java的Spring框架,可以利用Session和Cookie相结合的方式实现记住登录状态。Spring Security提供了RememberMe服务来处理这一步骤。 - **过期策略**:合理设置Cookie的过期...

Global site tag (gtag.js) - Google Analytics