JS操作cookies详解全集

JS操作cookies详解全集
JS操作cookies详解全集

JS操作Cookies

(2009-03-05 13:03:39)

一直都是简单去js实现cookie的一些操作,今天把js对cookie操作系统的整理了一遍,包括:js 读取cookie,js添加cookie,js删除cookie,示例如下:

cookie处理函数练习(为我所写,非我所想:改善面向对象)

//添加cookie

function addCookie(name,value,expires,path,domain){

var str=name+"="+escape(value);

if(expires!=""){

var date=new Date();

date.setTime(date.getTime()+expires*24*3600*1000);//expires单位为天 str+=";expires="+date.toGMTString();

}

if(path!=""){

str+=";path="+path;//指定可访问cookie的目录

}

if(domain!=""){

str+=";domain="+domain;//指定可访问cookie的域

}

document.cookie=str;

}

//取得cookie

function getCookie(name){

var str=document.cookie.split(";")

for(var i=0;i

var str2=str[i].split(”=”);

if(str2[0]==name)return unescape(str2[1]);

}

}

//删除cookie

function delCookie(name){

var date=new Date();

date.setTime(date.getTime()-10000);

document.cookie=name+”=n;expire=”+date.toGMTString();

[下面讲的经个人觉得比较好哦!]

我们当然还得介绍cookie的四个属性。这些属性用下面的格式加到字符串值后面:

name=[; expires=][; domain=][; path=][; secure]

名称=<值>[; expires=<日期>][; domain=<域>][; path=<路径>][; 安全]

, , 应当用对应的值替换。 应当使用GMT格式,可以使用Javascript脚本语言的日期类Date的.toGMTString() 方法得到这一GMT格式的日期值。方括号代表这项是可选的。比如在 [; secure]两边的方括号代表要想把cookie设置成安全的,就需要把"; secure" 加到cookie字符串值的后面。如果"; secure" 没有加到cookie字符串后面,那么这个cookie就是不安全的。不要把尖括号<> 和方括号[] 加到cookie里(除非它们是某些值的内容)。设置属性时,不限属性,可以用任何顺序设置。

下面是一个例子,在这个例子里,cookie "username" 被设置成在15分钟之后过期,可以被服务器上的所有目录访问,可以被"https://www.360docs.net/doc/8d984178.html,"域里的所有服务器访问,安全状态为安全。

// Date() 的构造器设置以毫秒为单位

// .getTime() 方法返回时间,单位为毫秒

// 所以要设置15分钟到期,要用60000毫秒乘15分钟

var expiration = new Date((new Date()).getTime() + 15 * 60000);

document.cookie = "username=" + escape(https://www.360docs.net/doc/8d984178.html,ername.value)+ "; expires ="

+ expiration.toGMTString() + "; path=" + "/" + "; _

domain=" + "https://www.360docs.net/doc/8d984178.html," + "; secure";

// 我们定义一个函数,用来读取特定的cookie值。[得到指定名字的cookie对象哦!]function getCookie(cookie_name)

{

var allcookies = document.cookie;

var cookie_pos = allcookies.indexOf(cookie_name);

// 如果找到了索引,就代表cookie存在,

// 反之,就说明不存在。

if (cookie_pos != -1)

{

// 把cookie_pos放在值的开始,只要给值加1即可。

cookie_pos += cookie_name.length + 1;

var cookie_end = allcookies.indexOf(";", cookie_pos);

if (cookie_end == -1)

{

cookie_end = allcookies.length;

}

var value = unescape(allcookies.substring(cookie_pos, cookie_end));

}

return value;

}

// 调用函数

var cookie_val = getCookie("username");

3.为什么我设置了cookie的过期时间如果为关闭的时候就自动清空的话怎么没用呢?

来研究一下JSP操纵cookie?

Cookie概念:

Cookie的格式实际上是一段纯文本信息, 由服务器随着网页一起发送到客户端, 并保存在客户端硬盘中指定的目录的. 大家都传说Cookie会造成严重的安全威胁什么的, 其实不是这么回事情. 服务器读取Cookie的时候, 只能够读取到这个服务器相关的信息. 而且, 浏览器一般只允许存放300个Cookie, 每个站点最多存放20个, 而且, 每个Cookie的大小现在在4K, 根本不会占用多少空间. 并且, Cookie是有时效性质的. 例如, 设置了Cookie的存活时间为1分钟, 则一分钟后这个Cookie就会被浏览器删除

Cookie版本:

目前有两个版本:

版本0 : 由Netscape公司制定的,也被几乎所有的浏览器支持. Java中为了保持兼容性, 目前只支持到版本0, Cookie的内容中不能空格,方括号,圆括号,等于号(=),逗号,双引号,斜杠,问号,@符号,冒号,分号。

版本1 : 根据RFC 2109文档制定的. 放宽了很多限制. 上面所限制的字符都可以使用. 但为了保持兼容性, 应该尽量避免使用这些特殊字符.

JSP中对Cookie的操作: 类型方法名方法解释

String getComment() 返回cookie中注释,如果没有注释的话将返回空值.

String getDomain() 返回cookie中Cookie适用的域名. 使用getDomain() 方法可以指示浏览器

把Cookie返回给同一域内的其他服务器,而通常Cookie只返回给与发送它的服务器名字完全相同的服务器。注意域名必须以点开始

int getMaxAge() 返回Cookie过期之前的最大时间,以秒计算。

String getName() 返回Cookie的名字

String getPath() 返回Cookie适用的路径。如果不指定路径,Cookie将返回给当前页面所在目录及其子目录下的所有页面。

boolean getSecure() 如果浏览器通过安全协议发送cookies将返回true值,如果浏览器使用标准协议则返回false值。

String getValue() 返回Cookie的值。笔者也将在后面详细介绍getValue/setValue。

int getVersion() 返回Cookie所遵从的协议版本。

void setComment(String purpose) 设置cookie中注释

void setDomain(String pattern) 设置cookie中Cookie适用的域名

void setMaxAge(int expiry) 以秒计算,设置Cookie过期时间。

void setPath(String uri) 指定Cookie适用的路径。

void setSecure(boolean flag) 指出浏览器使用的安全协议,例如HTTPS或SSL。

void setValue(String newValue) cookie创建后设置一个新的值。

void setVersion(int v) 设置Cookie所遵从的协议版本

一个简单的例子

1. 写入Cookie --- writecookie.jsp

-------------------------------------------------------------

<%@ page contentType="text/html; charset=ISO8859_1" %>

<%

Cookie _cookie=new Cookie("user_delfancom", "delfan");

_cookie.setMaxAge(30*60); // 设置Cookie的存活时间为30分钟

response.addCookie(_cookie); // 写入客户端硬盘

out.print("写Cookie完成");

%>

2. 读取Cookie.jsp --- readcookie.jsp

-------------------------------------------------------------

<%

Cookie cookies[]=request.getCookies(); // 将适用目录下所有Cookie读入并存入cookies数组中

Cookie sCookie=null;

String sname=null;

String name=null;

if(cookies==null) // 如果没有任何cookie

out.print("none any cookie");

else

{

out.print(cookies.length + "
");

for(int i=0;i

{

sCookie=cookies[i];

sname=sCookie.getName();

name = sCookie.getValue();

out.println(sname + "->" + name + "
");

}

}

%>

需要注意的两个问题:

1. Cookie有个适用路径的问题, 就是说如果 writecookie.jsp和readcookie.jsp要放在同意目录下, 如果不在同一目录下, 则写的时候需要设置路径,为readcookie.jsp所在的路径.

2. 读入Cookie数组的时候需要判断是否为空(null), 网上很多代码都没有写出这一点.

jquery.cookie使用方法(中文详细版)

jquery.cookie使用方法 一个轻量级的cookie插件,可以读取、写入、删除cookie。 jquery.cookie.js的配置 首先包含jQuery的库文件,在后面包含jquery.cookie.js的库文件。 使用方法 新添加一个会话cookie: 创建一个cookie并设置有效时间为7天: 创建一个cookie并设置cookie的有效路径: 读取cookie: 删除cookie,通过传递null作为cookie的值即可: 相关参数的解释 定义cookie的有效时间,值可以是一个数字(从创建cookie时算起,以天为单位)或一个Date对象。如果省略,那么创建的cookie是会话cookie,将在用户退出浏览器时被删除。 默认情况:只有设置cookie的网页才能读取该cookie。 定义cookie的有效路径。默认情况下,该参数的值为创建cookie的网页所在路径(标准浏览器的行为)。如果你想在整个网站中访问这个cookie需要这样设置有效路径:path: '/'。如果你想删除一个定义了有效路径的cookie,你需要在调用函数时包含这个路径:$.cookie('the_cookie', null, { path: '/' });。

默认值:创建cookie的网页所拥有的域名。 默认值:false。如果为true,cookie的传输需要使用安全协议(HTTPS)。 默认值:false。 默认情况下,读取和写入cookie的时候自动进行编码和解码(使用encodeURIComponent编码,decodeURIComponent解码)。要关闭这个功能设置raw: true即可。

跨域获取cookie,多个网站实现一键登录

A网站首页PHP(也可以在登录页面加入下面的代码)加入如下代码 view plaincopy to clipboardprint? 1. A网站增加文件getcookies.php,目的是为了让B网站可以以ajax方式来查询A网站的cookie getcookies.php 代码如下 view plaincopy to clipboardprint? 1.$winduid,'msg'=>$msg)); 4.//可以用json_encode自动转换,也可以手写json格 式 $json_data = '{"mywinduid":'.$mywinduid.'}'; 5.$json_data = json_encode(array('mywinduid'=>$mywinduid)); 6.//必需以下这样形式输出,重点就是发送请求的网页的参数中要有jsoncallback参 数 7.echo $callback.'('.$json_data.')'; 8.?> 在需要查询A网站cookie的B网站页面中增加如下代码 view plaincopy to clipboardprint? 1. 2.

使用Cookie记录用户名和密码

使用Cookie记录用户名和密码 一、用户登录操作 在用户填写登录数据后,提交表单进行登录验证,如果用户名和密码正确,则把用户名和密码保存在客户端。页面如图1所示 实现代码如下所示。 ... response.setContentType("text/html;charset=gbk"); //获取用户名 String userName = request.getParameter("username"); //获取用户密码 String password = request.getParameter("password"); //验证用户是否合法 if ("accp".equals(userName) && "accp".equals(password)) { //如果合法,把用户名和密码保存在客户端Cookie中 //获取客户选择的Cookie保存时间 String cookieDate = request.getParameter("cookieDate"); int date = 0; if (cookieDate != null && cookieDate != "") date = Integer.parseInt(cookieDate); //创建用户名Cookie对象 Cookie cookieName = new Cookie("accpLoginName", userName); //设置Cookie保存时间 cookieName.setMaxAge(date); //添加到客户端 response.addCookie(cookieName);

Cookie cookiePass = new Cookie("accpLoginPass", password); //设置保存Cookie时间 cookiePass.setMaxAge(date); //添加到客户端 response.addCookie(cookiePass); response.sendRedirect("success.jsp"); } else { response.sendRedirect("fail.jsp"); } ... 二、用户再次登录时操作 服务器首先读取客户端Cookie信息,如果存在用户名和密码数据,则直接登录,否则显示登录页面。 实现代码如下所示。 response.setContentType("text/html;charset=gbk"); //用户名和密码是否存在以及合法的判断参数 boolean bool=false; //获取客户端Cookie数组 Cookie[] cookies = request.getCookies(); //判断客户端是否存在Cookie对象 if (cookies != null) { //预定义保存用户名和密码的变量 String userName = ""; String password = ""; //遍历Cookie数组 for (int i = 0; i < cookies.length; i++) { //取得每一个Cookie对象 Cookie cookie = cookies[i]; //判断Cookie的名称是否等于"accpLoginName" if ("accpLoginName".equals(cookie.getName())) { userName = cookie.getV alue(); } //判断Cookie的名称是否等于"accpLoginPass" if ("accpLoginPass".equals(cookie.getName())) { password = cookie.getV alue(); } }

解决js跨域问题

JSONP(JSON With Padding),就是打包在函数调用中的的JSON(或者包裹的JSON)。AJAX和JSONP在jQuery中的调用方式看起来极为相像,千万不要被这种现象迷惑,它们本质上有很大不同。AJAX是通过XMLHttpRequest对象获取非页面内容,而JSONP是动态的添加