Cookie.js 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. //处理Cookie:
  2. Namespace.register("U.UF.Cookie");
  3. /**
  4. *在www.boomyun.com等其他网站调用www.1473.cn的后台数据时,动态植入js文件,js文件会把1473的cookie带到自己的网站中.实现跨域功能
  5. *在iframe中调用此函数,会把主页的cookie传递到子域, 跨域加载cookie,1473子域用,其他跨域不能用,为了兼容ie6,ie7,暂时未用。
  6. *
  7. * @param {string} 跨域的url
  8. * @param {function} 成功记载后的回调函数
  9. */
  10. U.UF.Cookie.crossDomain = function (url, cb) {
  11. //跨域的时候由于cookie出现问题
  12. U.UF.DL.asynLoadJs({ "src": url }, cb);
  13. }
  14. /**
  15. * 设置cookie
  16. *
  17. * @param {string || object} cookie 字符串或者cookie集合。参见例一,例三。
  18. *
  19. * @param {object} cookie 的key
  20. ----------path: null, //cookie地址
  21. ----------domain: null, //cookie域
  22. ----------expires: 365, //cookie过期时间
  23. ----------secure: null //cookie来源
  24. * @return {string}
  25. *例一:U.UF.Cookie.set("usestudiossso=UserId=aa&UserName=zhangsan");net java模式
  26. *例二:U.UF.Cookie.set("15hulianwang=userid=123456&username=zhangsan");net java模式
  27. *例三:U.UF.Cookie.set({15hulianwang:{userid:123456,username:'zhangsan'}});nodejs模式
  28. */
  29. U.UF.Cookie.set = function (key, att) {
  30. var i, //循环初始化
  31. j, //循环初始化
  32. k = 0, //用于计数
  33. _cookiestr = ""; //最终的cookie字符串
  34. //如果key是字符串,则直接设置cookie,如果为集合,则转换为字符串进行处理。
  35. if (U.UF.C.isString(key)) {//判断设置的是否是字符串
  36. _cookiestr = key;
  37. document.cookie = U.UF.Cookie.setProperty(att, key);
  38. }
  39. //用json的方式设置网页的cookie,循环拼接cookie字符串
  40. else {
  41. for (i in key) {
  42. _cookiestr = i + "=";
  43. for (j in key[i]) {
  44. //把集合拆分成字符串。
  45. //如果k>0,则添加&号分割符
  46. if (k > 0) {
  47. _cookiestr += "&";
  48. }
  49. _cookiestr += j + "=" + encodeURIComponent(key[i][j]);
  50. k++;
  51. }
  52. //cookie处理
  53. document.cookie = U.UF.Cookie.setProperty(att, _cookiestr);
  54. }
  55. }
  56. return document.cookie;
  57. }
  58. /**
  59. * 设置指定参数(添加cookie属性)
  60. *
  61. * @param {object} cookie 的key
  62. ----------path: null, //cookie地址
  63. ----------domain: null, //cookie域
  64. ----------expires: 365, //cookie过期时间
  65. ----------secure: null //cookie来源
  66. * @param {string} 需要写入的cookie usestudio=aa=cc
  67. * @return {string} 返回写入的cookie值
  68. */
  69. U.UF.Cookie.setProperty = function (key, val) {
  70. var i, //循环初始化
  71. _pj, //记录循环时的键值
  72. _time, //时间,用户修改时间
  73. _cookie = {//cookie对象值
  74. path: "/", //cookie地址
  75. domain: document.domain, //cookie域
  76. expires: 365, //cookie过期时间
  77. secure: null //cookie来源
  78. };
  79. //一般不传递第二个参数,这里为空会报错,所以转换为集合
  80. key = key || {};
  81. for (i in _cookie) { //循环设置
  82. //不去找原型,直接找_cookie中定义的变量和方法
  83. if (i == "expires" && (key[i] || _cookie[i])) { //时间过期处理
  84. _time = new Date();
  85. //如果用户设置了时间,则用用户的时间,否则默认过期时间为一年
  86. var _etime = (key[i] || _cookie[i]) * 24 * 60 * 60 * 1000;
  87. _time.setTime(_time.getTime() + _etime); //时间变化处理
  88. key[i] = _time.toUTCString();
  89. }
  90. //判断是否设置cookie属性,如果用户不设置,系统默认为null,则不设置,例如secure: null
  91. if (key[i] || _cookie[i]) {
  92. //如果用户设置属性为null,则用系统的,否则用用户设置的属性
  93. if (key[i] == null) {
  94. _pj = _cookie[i];
  95. }
  96. else {
  97. _pj = key[i];
  98. }
  99. //拼接cookie。
  100. val += "; " + i + "=" + _pj; //添加cookie
  101. }
  102. };
  103. return val; //返回cookie
  104. }
  105. /**
  106. * 移除cookie(删除)
  107. *
  108. * @param {string} cookie 的key
  109. * @return {string}
  110. */
  111. U.UF.Cookie.del = function (key) {
  112. var i, //循环初始化
  113. _array, //分割后的建值数组
  114. _key = "", //删除指定的cookie
  115. _cookies = document.cookie.split("; "); //cookie值
  116. //过滤指定的cookie值
  117. for (i = 0; i < _cookies.length; i++) {
  118. _array = _cookies[i].split("=");
  119. //如果符合用户传递的cookie的key值,则转换为字符串
  120. if (!key || _array[0] == key) {
  121. //多cookie情况下,用分号分割,否则不分割
  122. var _cut = _key.length ? "; " : "";
  123. _key += _cut + _array[0] + "=";
  124. }
  125. }
  126. //删除指定的cookie
  127. if (_key) {
  128. U.UF.Cookie.set(_key, { expires: -1 });
  129. }
  130. else {
  131. console.log("not found cookie!");
  132. }
  133. }
  134. /**
  135. * 功能:获取用户指定的Cookie值
  136. 描述:浏览器cookie形如:"pgv_pvid=3156364456; usestudiosso=userid=72854d28-f45c-48d7-92b7-3cd933e03022&username=13928417148&Loginid=fd02976d-993b-4437-bbd9-5efa99802c8f&userstamp=1364812396; __qc_wId=563; amvid=319501000bca68c1adab006842344f44"
  137. 第一步:根据分号拆分成数组.
  138. 第二部:按照"="拆分
  139. 第三部:找到"usestudiosso",usestudiosso=userid=72854d28-f45c-48d7-92b7-3cd933e03022&username=13928417148&Loginid=fd02976d-993b-4437-bbd9-5efa99802c8f&userstamp=1364812396
  140. 第四步:去掉"usestudiosso",得到userid=72854d28-f45c-48d7-92b7-3cd933e03022&username=13928417148&Loginid=fd02976d-993b-4437-bbd9-5efa99802c8f&userstamp=1364812396
  141. 参数一:UKY为cookie名字,云端cookie名为:"usestudiosso"
  142. *
  143. * @param {string} 获取cookie的key对应的值 如usestudio=aa=ff&ss=aa 的usestudio里的 aa=ff&ss=aa
  144. * @param {string} aa=ff&ss=aa里面的aa对应的值 [ff]
  145. * @return {string, array} 上述参数里说明返回
  146. ---------第二个参数不存在的时候返回string
  147. ---------第二个参数存在的时候返回array
  148. */
  149. U.UF.Cookie.get = function (key, val) {
  150. var i, //循环初始化
  151. _valuearray, //储存字符串的数组
  152. _value = "", //返回值
  153. _cookies = document.cookie.split("; "); //从cookie中获取指定的cookie集
  154. //循环拆分cookie
  155. for (i = 0; i < _cookies.length; i++) {
  156. //以“=”的形式拆分成数组
  157. _valuearray = _cookies[i].split("=");
  158. //如果找到名为"usestudiosso"的cookie,则
  159. if (_valuearray[0] == key) {
  160. _valuearray.splice(0, 1);
  161. _value = _valuearray.join("=");
  162. break;
  163. } //生成指定的Cookie
  164. }
  165. if (val) {//从指定的cookie集里获取cookie值
  166. _cookies = _value.split("&");
  167. _value = [];
  168. for (i = 0; i < _cookies.length; i++) {
  169. _valuearray = _cookies[i].split("=");
  170. //获取指定的cookie值
  171. if (_valuearray[0] == val) {
  172. _value.push(decodeURIComponent(_valuearray[1]));
  173. }
  174. //判断是否是指定的cookie存在
  175. else if (_valuearray[1] == val) {
  176. return true;
  177. }
  178. }
  179. }
  180. return (_value.length ? _value : false);
  181. }