js中cookie的增删改查问题
2010-09-22 10:14
316 查看
在网上查了些资料,写了下面一个例子,一起分享。
但还有个问题为解决:
按照下面的写法,能够IE6,firefox浏览器中都能正常增,删,改,查。但如果
document.cookie =
cookieName+'='+getCookies(cookieName)+";expires="+(new
Date(0)).toUTCString()+';path=/';中加上
domain,secure
删除貌似不成功。(譬如:写成这样
cookieName+'='+getCookies(cookieName)+";expires="+(new
Date(0)).toUTCString()+';path=/'+';domain='+';secure'; 请知道其中奥秘的朋友,给我解答,可以直接跟贴,不胜感激
。
expires='+date.toUTCString()+';path=/';后面加上
<%@ page contentType="text/html; charset=gb2312"%>
<%@ page
import="java.io.*"%>
<%@ page import="javax.servlet.*"%>
<%@
page import="javax.servlet.http.*"%>
<%@ page
import="java.util.*"%>
<HTML>
<HEAD>
<TITLE>测试页</TITLE>
<script
type="text/javascript">
//
添加cookie信息
function saveCookies() {
var cookieKey =
document.getElementById('cookieKey');
var cookieValue =
document.getElementById('cookieValue');
if(!navigator.cookieEnabled){//浏览器是否支持cookie
alert('不Cookie项!');
}else
if(isBlankCheck(cookieKey.value)){//cookie的key为空
alert('请输入key');
cookieKey.focus();
}else
if(isBlankCheck(cookieValue.value)){//cookie的value为空
alert('请输入value');
cookieValue.focus();
}else{//设置cookie
var
date=new Date();
//设置过期时间
(3分钟)
date.setTime(date.getTime()+3*60000);
document.cookie=escape(cookieKey.value)+'='+escape(cookieValue.value)+';expires='+date.toUTCString()+';path=/';
}
}
// 获得指定cookie信息
function
getCookies(cookie_name) {
var retValue='';
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;
}
retValue = unescape(allcookies.substring(cookie_pos,
cookie_end));
}
return retValue;
}
//获得所有的cookie
function getAllCookies(){
return document.cookie;
}
//删除cookie信息
function deleteCookies()
{
var delCookieNameObj = document.getElementById('delCookieName');
var
delCookieName = delCookieNameObj.value;
if(!navigator.cookieEnabled){//浏览器是否支持cookie
alert('不Cookie项!');
}else
if(isBlankCheck(delCookieName)){//cookie的key为空
alert('请输入key');
delCookieNameObj.focus();
}else
if(isBlankCheck(getCookies(delCookieName))){
alert('该cookie不存在或已删除,请查询确认');
}else{//删除cookie
var
date = new
Date();
//删除一个cookie,就是将其过期时间设定为一个过去的时间
date.setTime(date.getTime()
- 4*60000);
//document.cookie='userName='+';expires='+date.toGMTString()+';path=/'+';domain='+';secure';
//document.cookie="userName" + "=;expires=Thu, 01-Jan-1970 00:00:01
GMT";
document.cookie =
delCookieName+'='+getCookies(delCookieName)+';expires='+(new
Date(0)).toUTCString()+';path=/';
showAllCookies();
}
}
// 设置cookie过期
function makeCookiesExpired()
{
alert('3分钟后,cookie过期,再点击【显示所有Cookie】查看');
}
//显示指定cookie信息
function
showOneCookie(cookieName){
var displayCookieNameObj =
document.getElementById(cookieName);
var displayCookieName =
displayCookieNameObj.value;
if(!navigator.cookieEnabled){//浏览器是否支持cookie
alert('不Cookie项!');
}else
if(isBlankCheck(displayCookieName)){//cookie的key为空
alert('请输入key');
displayCookieNameObj.focus();
}else
if(isBlankCheck(getCookies(displayCookieName))){
alert('该cookie不存在或已删除,请查询确认');
}else{
document.getElementById("cookieResult").innerHTML="<span><font
color=red>"+getCookies(displayCookieName)+"</font></span>"
}
}
//显示所有cookie信息
function
showAllCookies(){
document.getElementById("cookieResult").innerHTML="<span><font
color=red>"+getAllCookies()+"</font></span>"
}
//空字符串判断(为空:true/不为空:false)
function
isBlankCheck(value){
var ret =
true;
if(trim(value)!=''){
ret = false;
}
return ret;
}
//删除左右两端的空格
function trim(str){
return
str.replace(/(^/s*)|(/s*$)/g, "");
}
//删除左边的空格
function ltrim(str){
return
str.replace(/(^/s*)/g,"");
}
//删除右边的空格
function rtrim(str){
return
str.replace(/(/s*$)/g,"");
}
</script>
</HEAD>
<body>
<a
href="index.html">返回主页面</a><br/>
说明:
<ol>
<li>
输入cookie的key和Value,可以保存cookie
</li>
<li>
显示所有Cookie,可以查看所有cookie
</li>
<li>
输入cookie的key,即可查看当前cookie值
</li>
<li>
输入cookie的key,即可删除该cookie
</li>
</ol>
<form id="form1" name="form1" method="post"
action="#">
<input type="button" name="Submit"
value="显示所有Cookie"
onclick="showAllCookies()" />
<input
type="button" name="Submit2"
value="Cookie过期"
onclick="makeCookiesExpired()"
/><br/>
输入Key:
<input type="text" name="cookieKey"
/><br/>
输入value:
<input type="text" name="cookieValue"
/>
<input type="button" name="cookieEnabled"
value="保存Cookie"
onclick="saveCookies()"
/><br/>
输入查看key:
<input type="text"
name="displayCookieName" />
<input type="button" name="Submit1"
value="显示指定Cookie"
onclick="showOneCookie('displayCookieName');"
/>
<br />
输入删除key:
<input type="text"
name="delCookieName" />
<label>
<input type="button"
name="Submit3" value="删除Cookie"
onclick="deleteCookies()"
/>
</label>
<br />
</form>
<hr
/>
<div id="cookieResult">
<font
color="green">显示Cookie信息区域</font>
</div>
</body>
</HTML>
说明:
在Javascript脚本里,一个cookie
实际就是一个字符串属性。当你读取cookie的值时,就得到一个字符串,里面当前WEB页使用的所有cookies的名称和值。每个cookie除了
name名称和value值这两个属性以外,还有四个属性。这些属性是: expires过期时间、 path路径、
domain域、以及 secure安全
。
Expires
–
过期时间。指定cookie的生命期。具体是值是过期日期。如果想让cookie的存在期限超过当前浏览器会话时间,就必须使用这个属性。当过了到期日期时,浏览器就可以删除cookie文件,没有任何影响。
Path
– 路径。指定与cookie关联的WEB页。值可以是一个目录,或者是一个路径。如果 http://www.jzxue.com/html/java/
建立了一个cookie,那么在 http://www.jzxue.com/html/java/
目录里的所有页面,以及该目录下面任何子目录里的页面都可以访问这个cookie。这就是说,在 http://www.jzxue.com/html/java/stories/articles
里的任何页面都可以访问 http://www.jzxue.com/html/java/index.html
建立的cookie。但是,如果 http://www.jzxue.com/html/asp/
需要访问 http://www.jzxue.com/html/java/index.html
设置的cookes,该怎么办?这时,我们要把cookies
的path属性设置成“/”。在指定路径的时候,凡是来自同一服务器,URL里有相同路径的所有WEB页面都可以共享cookies。现在看另一个例子:如果想让
http://www.jzxue.com/devhead/filters/
和 http://www.jzxue.com/devhead/stories/
共享cookies,就要把path设成“/devhead”。
Domain
–
域。指定关联的WEB服务器或域。值是域名,比如jzxue.com。这是对path路径属性的一个延伸。如果我们想让 catalog.mycompany.com
能够访问shoppingcart.mycompany.com设置的cookies,该怎么办?
我们可以把domain属性设置成“mycompany.com”,并把path属性设置成“/”。FYI:不能把cookies域属性设置成与设置它的服务器的所在域不同的值
。(上面不成功原因
)
Secure
–
安全。指定cookie的值通过网络如何在用户和WEB服务器之间传递。这个属性的值或者是“secure”,或者为空。缺省情况下,该属性为空,也就是使用不安全的HTTP连接传递数据。如果一个
cookie
标记为secure,那么,它与WEB服务器之间就通过HTTPS或者其它安全协议传递数据。不过,设置了secure属性不代表其他人不能看到你机器本地保存的cookie。换句话说,把cookie设置为secure,只保证cookie与WEB服务器之间的数据传输过程加密,而保存在本地的
cookie文件并不加密。如果想让本地cookie也加密,得自己加密数据。
但还有个问题为解决:
按照下面的写法,能够IE6,firefox浏览器中都能正常增,删,改,查。但如果
document.cookie =
cookieName+'='+getCookies(cookieName)+";expires="+(new
Date(0)).toUTCString()+';path=/';中加上
domain,secure
删除貌似不成功。(譬如:写成这样
cookieName+'='+getCookies(cookieName)+";expires="+(new
Date(0)).toUTCString()+';path=/'+';domain='+';secure'; 请知道其中奥秘的朋友,给我解答,可以直接跟贴,不胜感激
。
expires='+date.toUTCString()+';path=/';后面加上
<%@ page contentType="text/html; charset=gb2312"%>
<%@ page
import="java.io.*"%>
<%@ page import="javax.servlet.*"%>
<%@
page import="javax.servlet.http.*"%>
<%@ page
import="java.util.*"%>
<HTML>
<HEAD>
<TITLE>测试页</TITLE>
<script
type="text/javascript">
//
添加cookie信息
function saveCookies() {
var cookieKey =
document.getElementById('cookieKey');
var cookieValue =
document.getElementById('cookieValue');
if(!navigator.cookieEnabled){//浏览器是否支持cookie
alert('不Cookie项!');
}else
if(isBlankCheck(cookieKey.value)){//cookie的key为空
alert('请输入key');
cookieKey.focus();
}else
if(isBlankCheck(cookieValue.value)){//cookie的value为空
alert('请输入value');
cookieValue.focus();
}else{//设置cookie
var
date=new Date();
//设置过期时间
(3分钟)
date.setTime(date.getTime()+3*60000);
document.cookie=escape(cookieKey.value)+'='+escape(cookieValue.value)+';expires='+date.toUTCString()+';path=/';
}
}
// 获得指定cookie信息
function
getCookies(cookie_name) {
var retValue='';
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;
}
retValue = unescape(allcookies.substring(cookie_pos,
cookie_end));
}
return retValue;
}
//获得所有的cookie
function getAllCookies(){
return document.cookie;
}
//删除cookie信息
function deleteCookies()
{
var delCookieNameObj = document.getElementById('delCookieName');
var
delCookieName = delCookieNameObj.value;
if(!navigator.cookieEnabled){//浏览器是否支持cookie
alert('不Cookie项!');
}else
if(isBlankCheck(delCookieName)){//cookie的key为空
alert('请输入key');
delCookieNameObj.focus();
}else
if(isBlankCheck(getCookies(delCookieName))){
alert('该cookie不存在或已删除,请查询确认');
}else{//删除cookie
var
date = new
Date();
//删除一个cookie,就是将其过期时间设定为一个过去的时间
date.setTime(date.getTime()
- 4*60000);
//document.cookie='userName='+';expires='+date.toGMTString()+';path=/'+';domain='+';secure';
//document.cookie="userName" + "=;expires=Thu, 01-Jan-1970 00:00:01
GMT";
document.cookie =
delCookieName+'='+getCookies(delCookieName)+';expires='+(new
Date(0)).toUTCString()+';path=/';
showAllCookies();
}
}
// 设置cookie过期
function makeCookiesExpired()
{
alert('3分钟后,cookie过期,再点击【显示所有Cookie】查看');
}
//显示指定cookie信息
function
showOneCookie(cookieName){
var displayCookieNameObj =
document.getElementById(cookieName);
var displayCookieName =
displayCookieNameObj.value;
if(!navigator.cookieEnabled){//浏览器是否支持cookie
alert('不Cookie项!');
}else
if(isBlankCheck(displayCookieName)){//cookie的key为空
alert('请输入key');
displayCookieNameObj.focus();
}else
if(isBlankCheck(getCookies(displayCookieName))){
alert('该cookie不存在或已删除,请查询确认');
}else{
document.getElementById("cookieResult").innerHTML="<span><font
color=red>"+getCookies(displayCookieName)+"</font></span>"
}
}
//显示所有cookie信息
function
showAllCookies(){
document.getElementById("cookieResult").innerHTML="<span><font
color=red>"+getAllCookies()+"</font></span>"
}
//空字符串判断(为空:true/不为空:false)
function
isBlankCheck(value){
var ret =
true;
if(trim(value)!=''){
ret = false;
}
return ret;
}
//删除左右两端的空格
function trim(str){
return
str.replace(/(^/s*)|(/s*$)/g, "");
}
//删除左边的空格
function ltrim(str){
return
str.replace(/(^/s*)/g,"");
}
//删除右边的空格
function rtrim(str){
return
str.replace(/(/s*$)/g,"");
}
</script>
</HEAD>
<body>
<a
href="index.html">返回主页面</a><br/>
说明:
<ol>
<li>
输入cookie的key和Value,可以保存cookie
</li>
<li>
显示所有Cookie,可以查看所有cookie
</li>
<li>
输入cookie的key,即可查看当前cookie值
</li>
<li>
输入cookie的key,即可删除该cookie
</li>
</ol>
<form id="form1" name="form1" method="post"
action="#">
<input type="button" name="Submit"
value="显示所有Cookie"
onclick="showAllCookies()" />
<input
type="button" name="Submit2"
value="Cookie过期"
onclick="makeCookiesExpired()"
/><br/>
输入Key:
<input type="text" name="cookieKey"
/><br/>
输入value:
<input type="text" name="cookieValue"
/>
<input type="button" name="cookieEnabled"
value="保存Cookie"
onclick="saveCookies()"
/><br/>
输入查看key:
<input type="text"
name="displayCookieName" />
<input type="button" name="Submit1"
value="显示指定Cookie"
onclick="showOneCookie('displayCookieName');"
/>
<br />
输入删除key:
<input type="text"
name="delCookieName" />
<label>
<input type="button"
name="Submit3" value="删除Cookie"
onclick="deleteCookies()"
/>
</label>
<br />
</form>
<hr
/>
<div id="cookieResult">
<font
color="green">显示Cookie信息区域</font>
</div>
</body>
</HTML>
说明:
在Javascript脚本里,一个cookie
实际就是一个字符串属性。当你读取cookie的值时,就得到一个字符串,里面当前WEB页使用的所有cookies的名称和值。每个cookie除了
name名称和value值这两个属性以外,还有四个属性。这些属性是: expires过期时间、 path路径、
domain域、以及 secure安全
。
Expires
–
过期时间。指定cookie的生命期。具体是值是过期日期。如果想让cookie的存在期限超过当前浏览器会话时间,就必须使用这个属性。当过了到期日期时,浏览器就可以删除cookie文件,没有任何影响。
Path
– 路径。指定与cookie关联的WEB页。值可以是一个目录,或者是一个路径。如果 http://www.jzxue.com/html/java/
建立了一个cookie,那么在 http://www.jzxue.com/html/java/
目录里的所有页面,以及该目录下面任何子目录里的页面都可以访问这个cookie。这就是说,在 http://www.jzxue.com/html/java/stories/articles
里的任何页面都可以访问 http://www.jzxue.com/html/java/index.html
建立的cookie。但是,如果 http://www.jzxue.com/html/asp/
需要访问 http://www.jzxue.com/html/java/index.html
设置的cookes,该怎么办?这时,我们要把cookies
的path属性设置成“/”。在指定路径的时候,凡是来自同一服务器,URL里有相同路径的所有WEB页面都可以共享cookies。现在看另一个例子:如果想让
http://www.jzxue.com/devhead/filters/
和 http://www.jzxue.com/devhead/stories/
共享cookies,就要把path设成“/devhead”。
Domain
–
域。指定关联的WEB服务器或域。值是域名,比如jzxue.com。这是对path路径属性的一个延伸。如果我们想让 catalog.mycompany.com
能够访问shoppingcart.mycompany.com设置的cookies,该怎么办?
我们可以把domain属性设置成“mycompany.com”,并把path属性设置成“/”。FYI:不能把cookies域属性设置成与设置它的服务器的所在域不同的值
。(上面不成功原因
)
Secure
–
安全。指定cookie的值通过网络如何在用户和WEB服务器之间传递。这个属性的值或者是“secure”,或者为空。缺省情况下,该属性为空,也就是使用不安全的HTTP连接传递数据。如果一个
cookie
标记为secure,那么,它与WEB服务器之间就通过HTTPS或者其它安全协议传递数据。不过,设置了secure属性不代表其他人不能看到你机器本地保存的cookie。换句话说,把cookie设置为secure,只保证cookie与WEB服务器之间的数据传输过程加密,而保存在本地的
cookie文件并不加密。如果想让本地cookie也加密,得自己加密数据。
相关文章推荐
- js读写cookie方式以及中文乱码问题
- js解决cookie跨域访问的问题
- jQuery.cookie.js取cookie值为undefined问题
- IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题
- jQuery.cookie.js中cookie设置遇到的问题
- 工作记录:js数组元素排队思路完美解决将浏览记录到cookie的问题
- ASP.Net和JS对Cookie的互操作问题
- 三种方式--JS/JSP/EL 解决在JSP中获取cookie中文乱码的问题
- js注册事件,查找dom,cookie增删改查 的封装
- 解决js存储中文cookie乱码问题
- js和.net操作Cookie遇到的问题
- js无法删除cookie问题
- js中实现cookie的增删改查(document.cookie的使用详情)
- asp.net和js对cookie的相互操作问题
- 原生js实现对cookie的增删改查
- ASP.Net和JS对Cookie的互操作问题
- js基础学习之--关于 Cookie 的增删改查的封装函数
- 关于php与js传递cookie中文值编码问题
- 解决asp.net 想入Cookie、js读取cookie乱码问题
- JS Cookie当天24点过期,chrome时差问题