筆者曾經參與一個大型多用戶商城的開發,系統用戶角色很多,有買家,賣家,代理商,系統管理員 ,普通管理員,超級管理員等,這些用戶都涉及到登陸系統,然後建立cookies的問題,由於角色的不同 ,這些用戶登陸系統後,所建的cookies都相對獨立,而且對一個多用戶商城來說,cookies區分域很重要 ,不同的域名要建不同的域。因此筆者在開發的過程中,寫了很多次的建cookies,取cookies的代碼,不 勝其煩!
既然都是建cookies,那麼肯定有共同點,我們何不抽象出來,寫一個通用的Cookie操作類呢,下面筆 者就以.net為例,來說明下如何實現這個類吧!
/////以下是建cookies的函數
public void SetCookies(string domain, string type, XieGou.XGMap map) { HttpCookie cookie = new HttpCookie(type);//定義cookie對象 DateTime dt = DateTime.Now;//定義時間對象 TimeSpan ts=new TimeSpan(1,0,0,0);//cookie有效作用時間,具體查msdn cookie.Expires = dt.Add(ts);//添加作用時間 cookie.Domain = domain; for(int i =0 ;i < map.Size() ; i++) { cookie.Values.Add(map.GetTag(i),map.GetValue(i).ToString());//增加屬性 } page.Response.AppendCookie(cookie);//確定寫入cookie中 }
/////以下是取cookies的函數
public string GetCookies(string type, string name) { if(page.Request.Cookies[type] != null) { if(page.Request.Cookies[type].Values[name] != null) { return page.Request.Cookies[type].Values[name].ToString(); } else { return "0"; } } return "0"; }
下面我們來看下,如何調用這兩個函數:
XieGou.XGMap map = new XGMap(); ///這裡用到的Map類,可以參考網上資料寫一個 map.Add("shopid",shop.m_id.ToString()); ///添加map對應表 map.Add("shopname",shop.m_name.ToString()); func.SetCookies(".shopxg.com","shopxg_namespace",map);
原理其實很簡單,先定義一個map類,把要建的cookies名稱和值放到map表裡,然後統一由SetCookies 來建cookies,這樣寫的好處,就是可以少寫很多代碼,特別是需要頻繁建cookies的網站!