天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

用Javascript讀取中文COOKIE的解決辦法

在Cookie的使用中,我們發現這樣一個問題:如果寫入Cookie的內容是中文(如用戶稱呼),用服務器端程序(如ASPphp)讀出完全正確,但是用一般的Javascript或VBScript的讀Cookie函數取出的卻是一堆亂碼。這是一個棘手的問題,因為在有些情況下,Cookie的內容需要在客戶機端用腳本語言讀取。如果你寫入了中文,得到了一堆亂碼,是不是感覺很別扭呢?解決這個問題,還要從Cookie的存取方式說起。 
  我們知道,寫入Cookie內容前需要進行escape(十六進制編碼),編碼時又是以字節為單位的,這就是問題的關鍵所在:任何一個漢字都會被拆成兩個字節分別編碼;而在讀Cookie時,unescape又以字節單位解碼,因此最后每個漢字都變成了兩個字節的亂碼。怎么辦呢?ASPphp方式能夠正確讀出,應該是在unescape解碼后,又按照unicode編碼把其中的漢字拼了出來。如果這樣的話,能不能找到一種變通的方法解決這個問題呢?仔細研究后發現,只要在十六進制codec(編解碼)過程中能夠保存漢字信息就行了,因而我們需要再外包一層codec過程,方案如下: 

  1.在escape編碼前,把Cookie字符串中的每個字符轉換為unicode碼的字符串形式(用一特殊字符作為字串的分隔符)。 

  2.在unescape解碼后,先把所有unicode字串提取出來,再用對應的函數轉換為原字符。 

復制代碼 代碼如下:
<SCRIPT LANGUAGE=Javascript>  
<!--  
//編碼程序:  
function CodeCookie(str)  
{  
 var strRtn="";  

 for (var i=str.length-1;i>=0;i--)  
 {  
  strRtn+=str.charCodeAt(i);  
  if (i) strRtn+="a"; //用a作分隔符  
 }  
 return strRtn;  
}  

//解碼程序:  
function DecodeCookie(str)  
{  
 var strArr;  
 var strRtn="";  

 strArr=str.split("a");  

 for (var i=strArr.length-1;i>=0;i--)  
 strRtn+=String.fromCharCode(eval(strArr[i]));  

 return strRtn;  
}  
//-->  
</script>  


VBScript版程序如下: 

復制代碼 代碼如下:
<SCRIPT LANGUAGE=vbscript>  
<!--  
"編碼程序:  
function CodeCookie(str)  
Dim i  
Dim strRtn  

for i=len(str) to 1 step -1  
strRtn=strRtn & ascw(mid(str,i,1))  
if (i<>1) then strRtn = strRtn & "a" "用a作分隔符  
next  
CodeCookie=strRtn  
end function  

"解碼程序:  
function DecodeCookie(str)  
Dim i  
Dim strArr,strRtn  

strArr=Split(str,"a");  

for i=UBound(strArr)-LBound(strArr) to 1 step -1  
strRtn=strRtn & chrw(Val(strArr(i)))  
next  

DecodeCookie=strRtn  
end function  
-->  
</script>  

例如你要寫入的Cookie內容是"一頂abc",經過CodeCookie變為"99a98a97a-31029a26432a"(基于安全考慮,將字符串反轉),再經過escape編碼后變為"99a98a97a%2D31029a26432a"(escape編碼將除字母和數字以外的字符轉換為十六進制%XX的形式),注意分隔符不能選%,D和數字。當然,如果有類似密碼的重要信息,還需要在加密上再強化一下。因為寫入Cookie的一般都是短信息,編碼后增加的一些字節可忽略不計。下面的Javascript讀寫Cookie函數中就加入了以上的中文支持。 

function SetCookie(name,value,expires) 

 var exp=new Date(); 
 exp.setTime(exp.getTime()+expires*60*1000); 
 documents.cookie=name+"="+escape(CodeCookie(value))+" ; expires="+exp.toGMTString()+" ; path=/"; 


function GetCookie (name) 

 var strArg=name+"="; 
 var nArgLen=strArg.length; 
 var nCookieLen=documents.cookie.length; 
 var nEnd; 
 var i=0; 
 var j; 

while (i<nCookieLen) 

 j=i+nArgLen; 
 if (documents.cookie.substring(i,j)==strArg) 

 nEnd=documents.cookie.indexOf (";",j); 
 if (nEnd==-1) nEnd=documents.cookie.length; 
 return DecodeCookie(unescape(documents.cookie.substring(j,nEnd))); 

 i=documents.cookie.indexOf(" ",i)+1; 
 if (i==0) break; 

 return null; 



如果用CGI程序寫入中文Cookie,客戶端讀取。如在ASP里,可以先使用前述的編碼函數后,再用response寫入,例如:response.cookies("Name")=CodeCookie("張三")至此,中文Cookie的問題基本解決。

JavaScript技術用Javascript讀取中文COOKIE的解決辦法,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 免费人成视频X8X8国产更快乐 | FREE性丰满HD毛多多 | 欧美性爱-第1页 | 久久精品观看 | 中文字幕在线不卡日本v二区 | 69国产精品人妻无码免费 | 乱子伦在线观看中文字幕 | 囯产精品久久久久免费蜜桃 | 菲律宾毛片 | 欧美特级另类xxx | 成年人视频免费在线观看 | 古装性艳史电影在线看 | 小货SAO边洗澡边CAO你动漫 | 亚洲AV永久无码精品澳门 | 性色AV一区二区三区咪爱四虎 | 丰满的女友1在线观看 | 玩弄人妻少妇500系列网址 | 亚洲高清视频在线 | 欧美 另类 美腿 亚洲 无码 | 黄色免费网址在线观看 | 中文字幕久精品视频在线观看 | 久草免费视频在线观看 | 国产自产第一区c国产 | 国产黄a三级三级三级 | 一本色道久久综合亚洲精品 | 日日射夜夜干夜夜插在线播放 | 最近韩国日本免费观看mv免费版 | 干极品美女 | 亚洲国产精品自在自线观看 | 久久人人爽人人片AV人成 | 久久精品热99看二 | 榴莲推广APP网站入口下载安装 | 国产精品久久久久秋霞影视 | 久久精品国产亚洲AV天美18 | 在教室轮流被澡高H林萌 | 国产人妻午夜无码AV天堂 | 亚洲福利区 | 99久久久久精品国产免费麻豆 | 国产婷婷午夜精品无码A片 国产婷婷色综合AV蜜臀AV | 亚洲色图在线观看视频 | 星空无限传媒视频在线观看视频 |