您的位置:首页 > Web前端 > JavaScript

分享:JavaScript操作Cookie工具文件

2008-08-21 08:33 381 查看
版权所有:刺桐红-技术工作室 王重光 蓝文雄

声明:分享类型的文章均为我们工作室为了项目需求封装的工具类,本着分享合作的信念,其中如有错误,欢迎来信交流

lwx707@hotmail.com 2008-08-21

//====Config==开始========================================================

//***************************部署修改************************************

var config_strDomain= ""; //域名

//该域名在下面的Cookie操作方法中有用到,放空直接从URL路径中识别

//所以开发过程,我们放空,但部署后要设n0.cn,这样COOKIE才会对二级域名有效

//====Config==结束========================================================

//去掉字符串前后空格 使用 str*** = str***.Trim();

String.prototype.Trim = function()

{

return this.replace(/(^\s+)|\s+$/g,"");

}

//====cookie操作==开始====================================================

//将COOKIE中使用的iExpires秒数转化为链接成document.cookie值的Expires串,如“;expires=***”

//(秒数),1表示10年有效,0表示不设有效时间,负数表示删除Cookie对象,大于等于2表示具体有效秒数,31536000秒=1年=(60*60*24*365)

function CookieExpires(iExpires)

{

if(iExpires != 0)

{

if(iExpires==1)

{

var expiresDate = new Date((new Date()).getTime() + 315360000 * 1000).toGMTString();

}

else

{

var expiresDate = new Date((new Date()).getTime() + iExpires * 1000).toGMTString();

}

return ";expires="+expiresDate;

}

else

{

return "";

}

}

//将COOKIE中使用的域strDomain转化为链接成document.cookie值的domain串,如“;domain=***”

function CookieDomain(strDomain)

{ //***************************部署修改************************************

if(strDomain == "" || strDomain == null)

{

if(config_strDomain == "") ////////////////////////////////////////////////////////////////////

{ /////////////////////

return ""; ///////////////////// 当系统部署后,系统将在带“.”的域下工作

} ///////////////////// 上面的config_strDomain也必设有值

else ///////////////////// 所以这段话可以删掉,只需用一句话就可以了:

{ ///////////////////// 就是“return ";domain="+config_strDomain;”

return ";domain="+config_strDomain; /////////////////////

} ////////////////////////////////////////////////////////////////////

}

else

{

return ";domain="+strDomain;

}

}

//将COOKIE中使用的作用路径strPath转化为链接成document.cookie值的path串,如“;path=***”

function CookiePath(strPath)

{

if(strPath == "" || strPath == null)

{

return "";

}

else

{

return ";path="+strPath;

}

}

/// 创建COOKIE对象并赋Value值

/// <summary>

/// 创建COOKIE对象并赋Value值,修改COOKIE的Value值也用此方法,因为对COOKIE修改必须重新设Expires

/// 使用:当只设Path而不设Domain时:SetCookieObj_Value("***","****",****,"","****");

/// </summary>

/// <param name="strCookieName">COOKIE对象名</param>

/// <param name="iExpires">COOKIE对象有效时间(秒数),1表示10年有效,0表示不设有效时间,负数表示删除Cookie对象,大于等于2表示具体有效秒数,31536000秒=1年=(60*60*24*365)</param>

/// <param name="strValue">COOKIE对象Value值</param>

/// <param name="strDomain">COOKIE对象作用域</param>

/// <param name="strPath">COOKIE对象作用路径</param>

function SetCookieObj_Value(strCookieName,strValue,iExpires,strDomain,strPath)

{ //***************************部署修改************************************

if(strCookieName == "" || strCookieName == null) ////////////////////////////////////////////////////////////////

{ ////////////////////////////////////////////////////////////////

alert("“strCookieName”不可为空"); ////////////////////////////////////////////////////////////////

} ////////

if(strValue == null) //////// 这一部分,

{ //////// 当系统部署时可以去掉

alert("“strValue”不可为空"); ////////

} //////// 因为其作用只是在开发过程中进行报错

if(iExpires == "" || iExpires == null) ////////

{ ////////////////////////////////////////////////////////////////

alert("“iExpires”不可为空"); ////////////////////////////////////////////////////////////////

} ////////////////////////////////////////////////////////////////

document.cookie = strCookieName.Trim() + "=" + encodeURIComponent(strValue.Trim()) + CookieExpires(iExpires) + CookieDomain(strDomain) + CookiePath(strPath);

}

/// 创建COOKIE对象并赋Value值(仅用于KEY修改操作时用,因为没有进行编码)

/// <summary>

/// 创建COOKIE对象并赋Value值(仅用于KEY修改操作时用,因为没有进行编码)

/// 使用:当只设Path而不设Domain时:SetCookieObj_Edit("***","****",****,"","****");

/// </summary>

/// <param name="strCookieName">COOKIE对象名</param>

/// <param name="iExpires">COOKIE对象有效时间(秒数),1表示10年有效,0表示不设有效时间,负数表示删除Cookie对象,大于等于2表示具体有效秒数,31536000秒=1年=(60*60*24*365)</param>

/// <param name="strValue">COOKIE对象Value值</param>

/// <param name="strDomain">COOKIE对象作用域</param>

/// <param name="strPath">COOKIE对象作用路径</param>

function SetCookieObj_Edit(strCookieName,strValue,iExpires,strDomain,strPath)

{ //***************************部署修改************************************

if(strCookieName == "" || strCookieName == null) ////////////////////////////////////////////////////////////////

{ ////////////////////////////////////////////////////////////////

alert("“strCookieName”不可为空"); ////////////////////////////////////////////////////////////////

} ////////

if(strValue == null) //////// 这一部分,

{ //////// 当系统部署时可以去掉

alert("“strValue”不可为空"); ////////

} //////// 因为其作用只是在开发过程中进行报错

if(iExpires == "" || iExpires == null) ////////

{ ////////////////////////////////////////////////////////////////

alert("“iExpires”不可为空"); ////////////////////////////////////////////////////////////////

} ////////////////////////////////////////////////////////////////

document.cookie = strCookieName.Trim() + "=" + strValue + CookieExpires(iExpires) + CookieDomain(strDomain) + CookiePath(strPath);

}

/// 创建COOKIE对象并赋多个KEY键值

/// <summary>

/// 创建COOKIE对象并赋多个KEY键值

/// 1、使用:当只设Path而不设Domain时:SetCookieObj_Key("***","****",****,"","****");

/// 2、设键/值如下:

/// var user = new Array();

/// user[0]={keyName:"lwx",keyValue:"2008"};

/// user[1]={keyName:"lwx11",keyValue:"2009"};

/// 访问:user[0].keyName=lwx user[0].keyValue=2008

/// 访问:user[1].keyName=lwx11 user[1].keyValue=2009

/// </summary>

/// <param name="strCookieName">COOKIE对象名</param>

/// <param name="iExpires">COOKIE对象有效时间(秒数),1表示10年有效,0表示不设有效时间,负数表示删除Cookie对象,大于等于2表示具体有效秒数,31536000秒=1年=(60*60*24*365)</param>

/// <param name="KeyValue">键/值对集合</param>

/// <param name="strDomain">COOKIE对象作用域</param>

/// <param name="strPath">COOKIE对象作用路径</param>

function SetCookieObj_Key(strCookieName,KeyValue,iExpires,strDomain,strPath)

{ //***************************部署修改************************************

if(strCookieName == "" || strCookieName == null) ////////////////////////////////////////////////////////////////

{ ////////////////////////////////////////////////////////////////

alert("“strCookieName”不可为空"); ////////////////////////////////////////////////////////////////

return; ////////////////////////////////////////////

} ////////////////////////////////////////////////////////////////

for(var i=0;i < KeyValue.length;i++) ////////////////////////////////////////////////////////////////

{ ////////////////////////////////////////////////////////////////

if(KeyValue[i].keyName =="" || KeyValue[i].keyName == null) ////////

{ ////////

alert("“keyName”不可为空"); ////////

return; //////// 这一部分,

} //////// 当系统部署时可以去掉

if(KeyValue[i].keyValue == null) //////// 因为其作用只是在开发过程中进行报错

{ ////////

alert("“KeyValue”不可为空"); ////////

return; ////////

} ////////////////////////////////////////////////////////////////

} ////////////////////////////////////////////////////////////////

if(iExpires == "" || iExpires == null) ////////////////////////////////////////////////////////////////

{ ////////////////////////////////////////////////////////////////

alert("“iExpires”不可为空"); ////////////////////////////////////////////////////////////////

return; ////////////////////////////////////////////////////////////////

} ////////////////////////////////////////////////////////////////

var strValue="";

for(var i=0;i < KeyValue.length;i++)

{

var keyName=KeyValue[i].keyName.Trim();

var keyValue=encodeURIComponent(KeyValue[i].keyValue.Trim());

strValue += keyName;

strValue += "=";

strValue += keyValue;

if(i==KeyValue.length-1)

{

break;

}

strValue += "&";

}

document.cookie = strCookieName.Trim() + "=" + strValue + CookieExpires(iExpires) + CookieDomain(strDomain) + CookiePath(strPath);

}

/// 读取Cookie某个对象的Value值

/// <summary>

/// 读取Cookie某个对象的Value值

/// </summary>

/// <param name="strCookieName">Cookie对象名称</param>

/// <returns>Value值,如果对象本就不存在,则返回字符串"CookieNonexistence"</returns>

function GetCookieObjValue(strCookieName)

{

var strAllCookies=document.cookie; //获取所有Cookie对象,以字符串形式返回(如:objName1=objCo1;objName2=objCo2;objName3=keyName1=keyValue1&keyName2=keyValue2)

var arrayCookies=strAllCookies.split(';'); //分离Cookie对象,返回Cookie对象数组,cookie对象间是以;分隔

for(var i=0;i<arrayCookies.length;i++) //读取各个Cookie对象

{

var cookieObj=arrayCookies[i].Trim(); //第i个cookie对象

var iStartPos = cookieObj.indexOf(strCookieName+"=");

if(iStartPos == 0)

{

var strObjValue = cookieObj.replace(strCookieName+"=","");

var iIsEqualSign = strObjValue.indexOf("=");

if(iIsEqualSign == -1)

{

return decodeURIComponent(strObjValue);

}

else

{

return strObjValue;

}

}

var iIsEqualSign = cookieObj.indexOf("=");

if(iIsEqualSign == -1) //说明Cookie的Value值为空

{

return "";

}

}

return "CookieNonexistence";

}

/// 读取Cookie某个对象的某个Key键的键值

/// <summary>

/// 读取Cookie某个对象的某个Key键的键值

/// </summary>

/// <param name="strCookieName">Cookie对象名称</param>

/// <param name="strKeyName">Key键名</param>

/// <returns>Key键值,如果对象本就不存在,则返回字符串"CookieNonexistence",如果Key键不存在,则返回字符串"KeyNonexistence"</returns>

function GetCookieKeyValue(strCookieName,strKeyName)

{

var strValue = GetCookieObjValue(strCookieName).Trim();

if(strValue=="CookieNonexistence")

{

return "CookieNonexistence";

}

var arrayKey=strValue.split('&');

for(var j=0;j<arrayKey.length;j++)

{

var arrayKeyAndValue=arrayKey[j].split('='); //得到某个键名与键值组成的只有两个元素的数组

if(strKeyName==arrayKeyAndValue[0])

{

return decodeURIComponent(arrayKeyAndValue[1]);

}

}

return "KeyNonexistence";

}

/// 修改某个COOKIE对象某个Key键的键值 或 给某个COOKIE对象添加Key键 都调用本方法

/// <summary>

/// 修改某个COOKIE对象某个Key键的键值 或 给某个COOKIE对象添加Key键 都调用本方法

/// </summary>

/// <param name="strCookieName">Cookie对象名称</param>

/// <param name="strKeyName">Key键名</param>

/// <param name="strKeyValue">Key键值</param>

/// <param name="iExpires">COOKIE对象有效时间(秒数),1表示永久有效,0表示不设有效时间,负数表示删除Cookie对象,大于等于2表示具体有效秒数,31536000秒=1年=(60*60*24*365)。注意:虽是修改功能,实则重建覆盖,所以时间也要重设,因为没办法获得旧的有效期</param>

/// <returns>如果对象本就不存在,则返回字符串"CookieNonexistence",如果操作成功返回字符串"success"。</returns>

function EditCookieKey(strCookieName,strKeyName,strKeyValue,iExpires)

{

var strOldKeyValue = GetCookieKeyValue(strCookieName,strKeyName);

if(strOldKeyValue=="CookieNonexistence")

{

return "CookieNonexistence";

}

if(strOldKeyValue=="KeyNonexistence") //找不到键,以下直接添加键/值对

{

var strObjValue = GetCookieObjValue(strCookieName);

if(strObjValue == "") //对象的值都为空了,那么键就不用加“&”

{

strObjValue += strKeyName+"=";

strObjValue += encodeURIComponent(strKeyValue.Trim());

}

else

{

strObjValue += "&"+strKeyName+"=";

strObjValue += encodeURIComponent(strKeyValue.Trim());

}

SetCookieObj_Edit(strCookieName,strObjValue,iExpires); //这里会出现一种情况,就是strObjValue本身只是简单字符串,那么加了键/值对,结果的strObjValue就不是纯字符串,也不是纯键值对,而是二者并存,我们在使用中要尽量避免这种情况的产生。

return "success";

}

else //找到键,以下进行修改键/值对

{

var strOldKeyValue = GetCookieKeyValue(strCookieName,strKeyName);

var strOldKeyString = strKeyName +"="+encodeURIComponent(strOldKeyValue);

var strNewKeyString = strKeyName +"="+encodeURIComponent(strKeyValue.Trim());

var strObjValue = GetCookieObjValue(strCookieName);

var strObjNewValue = strObjValue.replace(strOldKeyString,strNewKeyString);

SetCookieObj_Edit(strCookieName,strObjNewValue,iExpires);

return "success";

}

}

/// 删除COOKIE对象

/// <summary>

/// 删除COOKIE对象

/// </summary>

/// <param name="strCookieName">Cookie对象名称</param>

function DelCookie(strCookieName)

{

var strObjValue = GetCookieObjValue(strCookieName);

if(strObjValue=="CookieNonexistence")

{

return;

}

SetCookieObj_Value(strCookieName,"",-1);

}

/// 删除某个COOKIE对象某个Key子键

/// <summary>

/// 删除某个COOKIE对象某个Key子键

/// </summary>

/// <param name="strCookieName">Cookie对象名称</param>

/// <param name="strKeyName">Key键名</param>

/// <param name="iExpires">COOKIE对象有效时间(秒数),1表示永久有效,0表示不设有效时间,负数表示删除Cookie对象,大于等于2表示具体有效秒数,31536000秒=1年=(60*60*24*365)。注意:虽是删除功能,但只是删除某键,整个Cookie对象实则重建覆盖,所以时间也要重设,因为没办法获得旧的有效期</param>

/// <returns>如果对象本就不存在,则返回字符串"CookieNonexistence",找不到KEY键盘,返回"KeyNonexistence",如果操作成功返回字符串"success"。</returns>

function DelCookieKey(strCookieName,strKeyName,iExpires)

{

var strOldKeyValue = GetCookieKeyValue(strCookieName,strKeyName);

if(strOldKeyValue=="CookieNonexistence")

{

return "CookieNonexistence";

}

if(strOldKeyValue=="KeyNonexistence") //找不到键

{

return "KeyNonexistence";

}

else //找到键,以下进行修改键/值对

{

var strKeyValue = GetCookieKeyValue(strCookieName,strKeyName);

var strKeyString = strKeyName +"="+encodeURIComponent(strKeyValue);

var strObjNewValue ="";

var strObjValue = GetCookieObjValue(strCookieName);

var iIsOneKey = strObjValue.indexOf("&"+strKeyString);

if(iIsOneKey == -1) //说明是第一个键

{

strObjNewValue = strObjValue.replace(strKeyString+"&",""); //后面还有键时,但也有可能后面没有键,那这句话就删除不掉了

strObjNewValue = strObjNewValue.replace(strKeyString,""); //后面没有键时,多加这句话,确保成功删除

}

else

{

strObjNewValue = strObjValue.replace("&"+strKeyString,"");

}

SetCookieObj_Edit(strCookieName,strObjNewValue,iExpires);

return "success";

}

}

//====cookie操作==结束========================================================
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: