網站程式常需要儲存些資料,當然Cache、Session等Server端物件固然好用,
但可以儲存小量資料、方便快速操作的Cookie也是不可或缺的好幫手。 Cookie簡介
我們知道一般Cookie是依附瀏覽器的,故若將該功能關掉,Cookie也就等同失效。大概的介紹一下Cookie的幾個要點..
那麼每組Cookie約可以放1024個元字,雖然聽起來容量不算太小, 不過Random不習慣放太多資料在Cookie中,畢竟Cookie原本就是以輕便、快速為主要目的。 JavaScript Cookie的寫法
有寫過伺服端語言的都知道,Cookie使用很簡單,(asp/php)類似這樣的語法就可以存取Cookie的值.. ASP範例(by VBSCript):
'設定Cookie的值
Response.Cookies("userName") = "RazgrizLee"
Response.Cookies("userMail") = "Developer@RazgrizLee.net"
'取得Cookie值,以Response.Write顯示
Response.Write( "目前的會員名稱為:" & Request.Cookies("userName") )
可惜的是在JavaScript中比較麻煩一些, JavaScript的Cookie存放在 document.cookie 中,但…它是字串類型, 沒錯,所以你要自已拆開Cookie去對應,才知道是哪一組Cookie。 指定Cookie的方式則是以固定格式指定到 document.cookie , 格式為:值=鍵;expires=過期時間;path=路徑;domain=網域; 寫一個存取Cookie的輔助類別吧!
程式設計師如不懶,就寫不出好東西了,為了讓我們寫程式能夠更懶一點,Raz寫了一個輔助類別來用 Random有一個比較不好的習慣,就是寫什麼都喜歡亂命名 例如為了讓操作直覺一點,Random用Asp.Net的HttpCookie來當這個JS的類別名.
// 首先定義HttpCookie類別
var HttpCookie = function( name, value, expires, path, domain )
{
if( name ) this.Name = name;
if( value ) this.Value = value;
if( expires ) this.Expires = expires;
if( path ) this.Path = path;
if( domain ) this.Domain = domain;
};
// 這邊是HttpCookie的屬性及Function
HttpCookie.prototype =
{
Name:'', Value:'', Expires:'', Path:'/', Domain:'',
toCookie: function()
{
var NewCookie = this.Name + '=' + this.Value;
if( this.Expires ) NewCookie += (';expires=' + this.Expires);
if( this.Path ) NewCookie += (';path=' + this.Path);
if( this.Domain ) NewCookie += (';domain=' + this.Domain);
return NewCookie;
}
}
OK, 再來就是定義輔助類別, 直覺一點, 就叫CookieHelper吧, 這類的Class,Random較喜歡用Static Method.. 所以首先就是...全域的一個空function
var CookieHelper = function(){};
再來是拿來轉換時間的Method.. 因為Random習慣以小時為Cookie下定義, 所以這邊會把輸入的小時數轉換成毫秒。
// 將時間轉換成Millisecond, 再轉換為UTC String
CookieHelper.ConvertToUTCString = function( hourNumber )
{
var Timestamp = ( !hourNumber || hourNumber == 0 ) ? (0) : (new Date().getTime() + (hourNumber * 1000 * 60 * 60));
return new Date(Timestamp).toUTCString();
};
接下來就是主要的Method了..
// 設定Cookie ( 名稱, 值, 保存小時數, 路徑, 網域 )
CookieHelper.Set = function( cookieName, cookieValue, expireHour, path, domain )
{
//新增一個HttpCookie, 指定鍵、值,
var HC =
new HttpCookie
(
cookieName,
escape(cookieValue), //(這邊用escape做值的編碼)
CookieHelper.ConvertToUTCString(expireHour), //將小時數轉換為Milliseconds
path,
domain
);
//利用我們自定HttpCookie的toCookie方法取得字串並設定給Cookie
document.cookie = HC.toCookie();
};
// 取得Cookie ( 名稱 )
CookieHelper.Get = function( cookieName )
{
// 因為document.cookie是一連串的字串(所有Cookie都在這邊)
// 所以Raz用正則表達式來取得我們要的值
var regex = new RegExp( ("(^| )" + cookieName + "=([^;]*)(;|$)") );
var Matchs = document.cookie.match( regex );
if( Matchs ) return unescape( Matchs[2] ); //最後unescape
return null; //若沒有值則回傳null
};
// 刪除Cookie ( 名稱, 路徑, 網域 )
CookieHelper.Delete = function( cookieName, path, domain )
{
// 測試若無法取得值就不動作
if( !CookieHelper.Get(cookieName) ) return;
// 新增一個HttpCookie, 不同的是值為空, 並且時間為0
var HC =
new HttpCookie
(
cookieName,
null,
CookieHelper.ConvertToUTCString(0)
);
document.cookie = HC.toCookie();
};
Random已經將說明寫在Code註解裡了,所以就不再多說明囉, 使用的方式則是..
//設定, 指定Cookie24小時後失效
CookieHelper.Set('UserName','RazgrizLee.Net程式道',24);
//取得UserName
CookieHelper.get('UserName');
//刪除UserName
CookieHelper.Delete('UserName');
如何,很直覺吧,寫程式就是要懶才行...呵呵,Enjoy!
2009-08-20 18:32:00 By RazgrizHsu
1351 Visits
|
文章分類 Category關於站長 About
大家來噗浪 Plurk武林高手連結 Links免責聲明 Disclaimer
|