六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

客戶端Cookie中文編程

[摘要]在Cookie的使用中,我們發現這樣一個問題:如果寫入Cookie的內容是中文(如用戶稱呼),用服務器端程序(如ASP或PHP)讀出完全正確,但是用一般的JavaScript或VBScript的讀C...
在Cookie的使用中,我們發現這樣一個問題:如果寫入Cookie的內容是中文(如用戶稱呼),用服務器端程序(如ASP
或PHP)讀出完全正確,但是用一般的JavaScript或VBScript的讀Cookie函數取出的卻是一堆亂碼。這是一個棘手的問題,
因為在有些情況下,Cookie的內容需要在客戶機端用腳本語言讀取。如果你寫入了中文,得到了一堆亂碼,是不是感覺很
別扭呢?解決這個問題,還要從Cookie的存取方式說起。
  我們知道,寫入Cookie內容前需要進行escape(十六進制編碼),編碼時又是以字節為單位的,這就是問題的關鍵所
在:任何一個漢字都會被拆成兩個字節分別編碼;而在讀Cookie時,unescape又以字節單位解碼,因此最后每個漢字都變
成了兩個字節的亂碼。怎么辦呢?ASP或PHP方式能夠正確讀出,應該是在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);
 document.cookie=name+"="+escape(CodeCookie(value))+" ; expires="+exp.toGMTString()+" ; path=/";
}

function GetCookie (name)
{
 var strArg=name+"=";
 var nArgLen=strArg.length;
 var nCookieLen=document.cookie.length;
 var nEnd;
 var i=0;
 var j;

while (i<nCookieLen)
{
 j=i+nArgLen;
 if (document.cookie.substring(i,j)==strArg)
{
 nEnd=document.cookie.indexOf (";",j);
 if (nEnd==-1) nEnd=document.cookie.length;
 return DecodeCookie(unescape(document.cookie.substring(j,nEnd)));
}
 i=document.cookie.indexOf(" ",i)+1;
 if (i==0) break;
}
 return null;
}

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



主站蜘蛛池模板: 亚洲视频在线免费观看 | 欧美亚洲免费 | 色操网 | 午夜精品久久久久久久99热 | 日本成人片在线观看 | 亚洲六月丁香色婷婷综合久久 | 午夜看片 | 日韩欧美一区二区三区不卡在线 | 亚洲黄网在线 | 特级毛片全部免费播放a一级 | 一级做a爰片久久毛片 | 天天做天天干 | 青青草原在线新免费 | 四虎在线永久免费观看 | 日本亚洲天堂网 | 一级黄色在线播放 | 欧美特黄a级高清免费大片 欧美桃色视频 | 欧洲乱码专区一区二区三区四区 | 伊人久久大香线蕉免费视频 | 中文在线观看免费网站 | 青草视频在线观看免费网站 | 日韩在线视频第一页 | 亚洲精品福利在线观看 | 青青青在线视频人视频在线 | 亚洲婷婷综合中文字幕第一页 | 亚洲日本欧美日韩高观看 | 夜夜快播| 亚洲午夜在线播放 | 欧美视频久久 | 一级做a爰全过程免费视频 一级做a爰片性色毛片小说 | 亚洲男人的天堂网 | 婷婷开心中文字幕 | 青娱乐国产视频 | 亚洲成人欧美 | 天天操天天射天天色 | 五月天久久综合 | 欧美亚洲日本一区 | 在线观看黄日本高清视频 | 日本免费一区二区三区a区 日本免费一二三区 | 青青草成人免费在线视频 | 深夜男人天堂 |