对cookie和子cookie操作的封装
生活随笔
收集整理的這篇文章主要介紹了
对cookie和子cookie操作的封装
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 /**2 * 封裝cookie的操作3 * @type {Object}4 */5 var CookieUtil = {6 /**7 * 根據cookie的名字獲取相應的值8 * @param name cookie名字9 * @return {*}10 */11 get:function (name) {12 //對name進行URL編碼13 var cookieName = encodeURIComponent(name) + '=',14 cookieStart = document.cookie.indexOf(cookieName),15 cookieValue = null;16 //找到cookieName17 if (cookieStart > -1) {18 //以cookieStart為起點找到最近的";"19 var cookieEnd = document.cookie.indexOf(';', cookieStart);20 //沒找到";",則是document.cookie的最后一個值21 if (cookieEnd === -1) {22 cookieEnd = document.cookie.length;23 }24 //提取相應value字段25 cookieValue = decodeURIComponent(document.cookie.substring(cookieStart + cookieName.length, cookieEnd));26 }27 //返回28 return cookieValue;29 },30 /**31 * 設置一個cookie32 * @param name cookie名字33 * @param value 相應的值34 * @param expire 生存周期 Date35 * @param path 路徑36 * @param domain 域名37 * @param secure Boolean38 */39 set:function (name, value, expire, path, domain, secure) {40 //必須先進行URL編碼41 var cookieText = encodeURIComponent(name) + '=' + encodeURIComponent(value);42 if (expire instanceof Date) {43 //toGMTString()方法正確格式化Date對象44 cookieText += '; expire=' + expire.toGMTString();45 }46 if (path) {47 cookieText += '; path=' + path;48 }49 if (domain) {50 cookieText += '; domain=' + domain;51 }52 if (secure) {53 cookieText += '; secure';54 }55 document.cookie = cookieText;56 },57 /**58 * 刪除cookie59 * @param name60 * @param path61 * @param domain62 * @param secure63 */64 unset:function (name, path, domain, secure) {65 this.set(name, '', new Date(0), path, domain, secure);66 }67 };68 /*69 //set cookies70 CookieUtil.set(“name”, “Nicholas”);71 CookieUtil.set(“book”, “Professional JavaScript”);72 //read the values73 alert(CookieUtil.get(“name”)); //”Nicholas”74 alert(CookieUtil.get(“book”)); //”Professional JavaScript”75 //remove the cookies76 CookieUtil.unset(“name”);77 CookieUtil.unset(“book”);78 //set a cookie with path, domain, and expiration date79 CookieUtil.set(“name”, “Nicholas”, “/books/projs/”, “www.wrox.com”,80 new Date(“January 1, 2010”));81 //delete that same cookie82 CookieUtil.unset(“name”, “/books/projs/”, “www.wrox.com”);83 //set a secure cookie84 CookieUtil.set(“name”, “Nicholas”, null, null, null, true);85 */86 87 //子cookie的操作88 //為了繞開瀏覽器的單域名下的cookie數限制89 //子cookie是存放在單個cookie中的更小段的數據90 var SubCookieUtil = {91 /**92 * 獲取單個子cookie的值93 * @param name cookie名稱94 * @param subName 子cookie名稱95 * @return {*}96 */97 get:function (name, subName) {98 var subCookies = this.getAll(name);99 if (subCookies) {
100 return subCookies(subName);
101 } else {
102 return null;
103 }
104 },
105 /**
106 * 獲取所有子cookie并將它們放入一個對象中返回
107 * @param name cookie名稱
108 * @return {*} 返回對象或null
109 */
110 getAll:function (name) {
111 var cookieName = encodeURIComponent(name) + "=",
112 cookieStart = document.cookie.indexOf(cookieName),
113 cookieValue = null,
114 result = {};
115 if (cookieStart > -1) {
116 var cookieEnd = document.cookie.indexOf(";", cookieName);
117 if (cookieEnd === -1) {
118 cookieEnd = document.cookie.length;
119 }
120 //沒有進行解碼,因為要對子cookie分離操作
121 cookieValue = document.cookie.substring(cookieStart + cookieName.length, cookieEnd);
122 //
123 if (cookieValue.length > 0) {
124 //分離出子cookie的對象
125 var subCookies = cookieValue.split("&");
126 //遍歷分隔出子cookie的名稱和值,解碼后返回對象
127 for (var i = 0, len = subCookies.length; i < len; i++) {
128 var parts = subCookies[i].split("=");
129 result[decodeURIComponent(parts[0])] = decodeURIComponent(parts[1]);
130 }
131 return result;
132 }
133 }
134 //沒找到,返回空
135 return null;
136 },
137 /**
138 * 存儲單個子cookie
139 * @param name cookie名稱
140 * @param subName 子cookie名稱
141 * @param value 子cookie值
142 * @param expires 失效日期
143 * @param path 路徑
144 * @param domain 域名
145 * @param secure Boolean安全作用域
146 */
147 set:function (name, subName, value, expires, path, domain, secure) {
148 //獲取name名稱的所有子cookie,沒有則創建空對象
149 var subcookies = this.getAll(name) || {};
150 //給對象添加屬性和值
151 subcookies[subName] = value;
152 //調用setAll()方法
153 this.setAll(name, subcookies, expires, path, domain, secure);
154 },
155 /**
156 * 存儲所有子cookie
157 * @param name cookie名稱
158 * @param subcookies 子cookie名稱
159 * @param expires 失效日期
160 * @param path 路徑
161 * @param domain 域名
162 * @param secure Boolean安全作用域
163 */
164 setAll:function (name, subcookies, expires, path, domain, secure) {
165 var cookieText = encodeURIComponent(name) + "=";
166 //創建數組,用于保存子cookie
167 var subcookieParts = [];
168 //遍歷對象屬性
169 for (var subName in subcookies) {
170 //如果存在,則把編碼后的名稱和值保存到數組
171 if (subName.length > 0 && subcookies.hasOwnProperty(subName)) {
172 subcookieParts.push(encodeURIComponent(subName) + "=" + encodeURIComponent(subcookies[subName]));
173 }
174 }
175 //存在子cookie
176 if (subcookieParts.length > 0) {
177 //連接子cookie
178 cookieText += subcookieParts.join("& ");
179 if (expires instanceof Date) {
180 cookieText += ";expires=" + expires.toGMTString();
181 }
182 if (path) {
183 cookieText += ";path=" + path;
184 }
185 if (domain) {
186 cookieText += ";domain=" + domain;
187 }
188 if (secure) {
189 cookieText += ";secure";
190 }
191 } else {
192 //相當于刪除cookie操作
193 cookieText += ";expires=" + (new Date(0)).toGMTString();
194 }
195 document.cookie = cookieText;
196 },
197 /**
198 * 刪除單個子cookie的名稱和值
199 * @param name
200 * @param subName
201 * @param path
202 * @param domain
203 * @param secure
204 */
205 unset:function (name, subName, path, domain, secure) {
206 var subcookies = this.getAll(name);
207 if (subcookies) {
208 //刪除對應的屬性和值
209 delete subcookies[subName];
210 //重新設置cookie
211 this.setAll(name, subcookies, null, path, domain, secure);
212 }
213 },
214 /**
215 * 刪除所有子cookie
216 * @param name
217 * @param path
218 * @param domain
219 * @param secure
220 */
221 unsetAll:function (name, path, domain, secure) {
222 this.setAll(name, null, new Date(0), path, domain, secure);
223 }
224 };
225 /*
226 //assume document.cookie=data=name=Nicholas&book=Professional%20JavaScript
227 //get all subcookies
228 var data = SubCookieUtil.getAll(“data”);
229 alert(data.name); //”Nicholas”
230 alert(data.book); //”Professional JavaScript”
231 //get subcookies individually
232 alert(SubCookieUtil.get(“data”, “name”)); //”Nicholas”
233 alert(SubCookieUtil.get(“data”, “book”)); //”Professional JavaScript”
234
235 //assume document.cookie=data=name=Nicholas&book=Professional%20JavaScript
236 //set two subcookies
237 SubCookieUtil.set(“data”, “name”, “Nicholas”);
238 SubCookieUtil.set(“data”, “book”, “Professional JavaScript”);
239 //set all subcookies with expiration date
240 SubCookieUtil.setAll(“data”, { name: “Nicholas”, book: “Professional JavaScript” },
241 new Date(“January 1, 2010”));
242 //change the value of name and change expiration date for cookie
243 SubCookieUtil.set(“data”, “name”, “Michael”, new Date(“February 1, 2010”));
244
245 //just remove the “name” subcookie
246 SubCookieUtil.unset(“data”, “name”);
247 //remove the entire cookie
248 SubCookieUtil.unsetAll(“data”);
249 */
轉載于:https://www.cnblogs.com/webFrontDev/archive/2012/11/24/2786022.html
總結
以上是生活随笔為你收集整理的对cookie和子cookie操作的封装的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: POJ-1556 The Doors 线
- 下一篇: mysql java uuid_Java