Cookie概述

Cookie是由服务器端生成并储存在浏览器客户端上的数据。

在javaweb开发中Cookie被当做java对象在web服务器端创建,并由web服务器发送给特定浏览器客户端,并且web服务器可以向同一个浏览器客户端上同时发送多个Cookie,每一个Cookie对象都由name和value组成,name和value只能是字符串类型,浏览器接收到来自服务器的Cookie数据之后默认将其保存在浏览器缓存中(如果浏览器关闭,缓存消失,Cookie数据消失),只要浏览器不关闭,当我们下一次发送“特定”请求的时候,浏览器负责将Cookie数据发送给web服务器。我们还可以使用特殊的方法,将Cookie保存在客户端的硬盘上。永久性保存。这样关闭浏览器Cookie还是存在的,不会消失,比如:实现两周内自动登录。

Cookie作用

Cookie英文意思是小甜品,指饼干。在电脑术语中简单的说,Cookie就是服务器暂存放在你计算机上的一笔资料,好让服务器用来辨认你的计算机。当你在浏览网站的时候,Web服务器会先送一笔小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择,都记录下来。当下次你再光临同一个网站,Web服务器会先看看有没有它上次留下的Cookie资料,有的话,就会依据Cookie里的内容来判断使用者,送出特定的网页内容给你。

Cookie的使用很普遍,许多提供个人化服务的网站,都是利用Cookie来辨认使用者,以方便送出为使用者量身定做的内容,像是Web接口的免费E-mail网站,都要用到 Cookie。

Cookie中记载的资料有限,Cookie是安全的。网站不可能经由Cookie获得你的E-mail地址或是其它私人资料,更没有办法透过Cookie来存取你的计算机。但是如果你实在不喜欢Web服务器乱丢饼干(Cookie)到你家(Browser),当然可以让浏览器拒绝网站存放Cookie到你的计算机。只要在IE的“工具”菜单下选择“Intertnet选项”的“安全”,按自定义级别,将Cookie部分设为关闭,按确定,关闭浏览器,再重新启动浏览器即可。当你关闭Cookie之后,很多网站的个人化服务功能很可能也不能再使用了。

Cookie在现实生活中对应的场景

Cookie在客户端的保存形式和有效时间

服务器端默认创建的Cookie,发送到浏览器之后,浏览器默认将其保存在缓存中,当浏览器关闭之后Cookie消失。

服务器创建Cookie对象之后,调用setMaxAge方法设置Cookie的有效时间,

如果这个有效时间 >0,则该Cookie对象发送给浏览器之后浏览器将其保存到硬盘文件中。

如果这个有效时间 <0,则该Cookie对象也是被保存在浏览器缓存中,待浏览器关闭Cookie消失。

如果这个有效时间 =0,则该Cookie从服务器端发过来的时候就已经是一个已过时的Cookie。

Cookie和请求路径之间的关系

每一个Cookie和请求路径是绑定在一起的,只有特定的路径才可以发送特定的Cookie。

实际上浏览器是这样做的:浏览器在向web服务器发送请求的时候先去对应的请求路径下搜索是否有对应的Cookie,如果有Cookie,并且Cookie没有失效,则发送该Cookie或者多个Cookie到服务器端。请求路径和Cookie的关系是这样对应的:

假如获取Cookie时的路径是 :

  http://127.0.0.1:8080/Demo/getCookie

将来发送Cookie的路径包括如下路径 :

http://127.0.0.1:8080/Demo/getCookie(相同路径)

http://127.0.0.1:8080/Demo/xxxx(同目录)

http://127.0.0.1:8080/Demo/xxxx/xxxx/xxx(子目录)

不过我们也可以在创建Cookie对象的时候设置Cookie的关联路径,例如: cookie.setPath(“/Demo/system/login”);

那么如下的请求路径浏览器会发送该Cookie:

  http://127.0.0.1:8080/Demo/system/login(相同路径)

  http://127.0.0.1:8080/Demo/system/xxx(同一目录)

  http://127.0.0.1:8080/Demo/system/xxx/xxx(子目录)

浏览器禁用Cookie

当浏览器禁用Cookie之后,服务器还是仍然会将Cookie发送给浏览器,只不过这次浏览器选择了不接收。现在有很多网站的使用都是需要开启接收Cookie的。

Cookie工具类

java实现对Cookie的操作

setMaxAge()

设置cookie经过多少秒后被删除。如果参数是0,就说明立即删除。如果是负数就表明当浏览器关闭时自动删除。如果没有设定cookie的age可以用getMaxAge方法来查看cookie的默认存活时间。

setPath()

方法设置Cookie路径,不设置的话为当前路径(对于Servlet来说为request.getContextPath() + web.xml里配置的该Servlet的url-pattern路径部分)。

cookie.setPath("/")

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

cookie.setDomain(".xxx.com")

这样设置,能实现两个网站共用。

 package com.wdxc.util;

 import java.util.HashMap;
import java.util.Map; import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Cookie工具类
* @author wangbo
*
*/
public class CookieUtil { /**
* 设置Cookie,将maxAge设为0就是删除Cookie
* @param response
* @param name
* @param value
* @param maxAge 有效期,以秒为单位
*/
public static void addCookie(HttpServletResponse response,String name,String value,int maxAge){
Cookie cookie = new Cookie(name,value);
cookie.setPath("/");
cookie.setMaxAge(maxAge);
response.addCookie(cookie);
} /**
* 根据名字读取Cookie
* @param request
* @param name
* @return
*/
public static String getCookieByName(HttpServletRequest request, String name){
Map<String,Cookie> cookieMap = ReadCookieMap(request);
if(cookieMap.containsKey(name)){
Cookie cookie = (Cookie)cookieMap.get(name);
String value = cookie.getValue();
return value;
}else{
return null;
}
} /**
* 获取所有的Cookie
* @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;
}
}

JS实现对Cookie的操作

//写Cookie,默认30天
function setCookie(name,value){
var days = 30;//此Cookie默认保存30天
var exp = new Date();
exp.setTime(exp.getTime() + days*24*60*60*1000);
document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
} //读取Cookie
function getCookie(name){
var arr,reg = new RegExp("(^| )"+name+"=([^;]*)(;|$)");
if(arr = document.cookie.match(reg))
return unescape(arr[2]);
else
return null;
} //删除Cookie
function delCookie(name){
var exp = new Date();
exp.setTime(exp.getTime() - 1);
var cval = getCookie(name);
if(cval != null)
document.cookie = name + "="+cval+";expires="+exp.toGMTString();
} //使用示例
setCookie("name","wangbo");
getCookie("name");
//如果需要设定自定义过期时间 ,那么把上面的 setCookie 函数换成下面两个函数就ok;
//写Cookie,自定义时间
function setCookie(name,value,time){
var strsec = getSec(time);
var exp = new Date();
exp.setTime(exp.getTime() + strsec*1);
document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
} //解析时间
//这是有设定过期时间str的使用示例:
//s是秒,如20秒则是s20
//h是小时,如12小时则是h12
//d是天数,如30天则是d30
function getSec(str){
var preStr = str.substring(0,1);
var numStr = str.substring(1,str.length)*1;
if (preStr=="s"){
return numStr*1000;
}else if (preStr=="h"){
return numStr*60*60*1000;
}else if (preStr=="d"){
return numStr*24*60*60*1000;
}
} //使用示例
setCookie("name","wangbo","s20");

JavaScript操作和使用Cookie的更多相关文章

  1. Cookie介绍及JavaScript操作Cookie方法详解

    本文主要为大家简单介绍了以下Cookie的用途.运行机制,以及JavaScript操作Cookie的各种方法,总结的比较全面,希望能给大家带来帮助. 什么是 Cookie “cookie 是存储于访问 ...

  2. 简述在javascript和jquery中cookie的使用

    html <body onload="cookieJar()"></body> javascript <script href="../st ...

  3. C# 操作Session、Cookie,Url 编码解码工具类WebHelper

    using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Text ...

  4. 使用javascript操作cookies的实例

    <script> //写cookies函数 作者:翟振凯 function SetCookie(name,value)//两个参数,一个是cookie的名子,一个是值 { var Days ...

  5. javascript 操作cookies详解

    javascript 操作cookies详解 这段操作cookies的方法我使用很久了,但是一直一来没遇到什么问题,今天在做一个在第一个页面保存了cookies,第二个页面获取或者第三个页面获取的功能 ...

  6. 用javascript设置和读取cookie的例子

    请看下面用javascript设置和读取cookie的简单例子,现在的问题是,如果要设置的是一个cookie集,比如在cookie1集中有uname,uid两组信息,应该如何写呢?cookie(&qu ...

  7. JavaScript操作XML

    JavaScript操作XML (一) JavaScript操作XML是通过XML DOM来完成的.那么什么是XML DOM呢?XML DOM 是: 用于 XML 的标准对象模型 用于 XML 的标准 ...

  8. 使用JavaScript操作DOM节点元素的常用方法(创建/删除/替换/复制等)

    getElementById(id)这是通过id来访问某一元素,最常用的之一,例:<html><body><div id="myid">test ...

  9. 在Javascript操作JSON对象,增加 删除 修改

    在Javascript操作JSON对象,增加删除修改全有的,详情见代码 <script type="text/javascript"> var jsonObj2 = { ...

随机推荐

  1. linux下启动tomcat服务

     Linux下tomcat服务的启动.关闭与错误跟踪,使用PuTTy远程连接到服务器以后,通常通过以下几种方式启动关闭tomcat服务:切换到tomcat主目录下的bin目录(cd usr/local ...

  2. LeetCode OJ 102. Binary Tree Level Order Traversal

    题目 Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to rig ...

  3. c++冒号作用

    转自http://www.360doc.com/content/13/0605/11/3373961_290615318.shtml 1.冒号(:)用法 (1)表示机构内位域的定义(即该变量占几个bi ...

  4. VideoView 监听视频格式不支持时的错误。

    视频播放格式不支持的处理https://www.cnblogs.com/ygj0930/p/7737209.html 不处理的情况下,默认会有弹框提示:不支持该视频格式. mVideoView.set ...

  5. 学习linux—— VMware 安装 ubantu 18 如何连接wifi

    1 适配器设置 修改本地连接 2 修改VMware的虚拟网络编辑器 3 虚拟机设置

  6. 使用::befor和::after伪元素在网站中添加图标

    css3为了区分伪类和伪元素,伪元素采用双冒号写法. 常见伪类——:hover,:link,:active,:target,:not(),:focus. 常见伪元素——::first-letter,: ...

  7. yum源解释。。。。。

    主要说明下如何配置linux上的本地yum源,主要关于一些原理上的说明. 1.yum是什么,yum源又是什么       在windows上安装一个软件,我们可以通过360管家.因为360管家提供了软 ...

  8. pipeline-安全测试

    代码安全检查 需要安装SonarQube(版本6.7,安装了Findbugs插件) MySQL >=5.6,笔者安装的是MySQL 5.7版本 Jenkins需要安装下列插件: SonarQub ...

  9. [leetcode]4. Median of Two Sorted Arrays俩有序数组的中位数

    There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two ...

  10. thinkphp 查表返回的数组,js解析有UNICode编码,解决办法

    public function getDeviceMsg(){ $allDevicesMsg = M("newdevicesstatus")->getField(" ...