手写jquery.cookie插件

不念不忘少年蓝@ 2023-01-01 06:59 294阅读 0赞
  1. /**
  2. * 设置cookie
  3. * @param name
  4. * @param value
  5. * @param config expires:(Number|Date)有效期;设置一个整数时,单位是天;也可以设置一个日期对象作为Cookie的过期日期;
  6. path:(String)创建该Cookie的页面路径;
  7. domain:(String)创建该Cookie的页面域名;
  8. secure:(Boolean)如果设为true,那么此Cookie的传输会要求一个安全协议,例如:HTTPS;
  9. */
  10. function addCookie(name,value,config = {
  11. expires: null,
  12. path: null,
  13. maxAge: null,
  14. domain: null,
  15. secure: true,
  16. httpOnly: true
  17. }) {
  18. value = $.cookie.json ? JSON.stringify(value) : value;
  19. value = $.cookie.raw ? value : encodeURIComponent(value);
  20. let cookieStr = name + '=' + value;
  21. if(config) {
  22. if(config.expires) {
  23. if(typeof config.expires === 'number') {
  24. const date=new Date();
  25. date.setTime(date.getTime()+config.expires*86400000);
  26. cookieStr += '; expires=' + date.toUTCString();
  27. }else if(config.expires instanceof Date) {
  28. cookieStr += '; expires=' + config.expires.toUTCString();
  29. }else {
  30. throw new Error('expires属性必须为Number或Date类型')
  31. }
  32. }
  33. cookieStr += config.path ? '; path='+config.path : '';
  34. cookieStr += config.maxAge ? '; max-age='+config.maxAge : '';
  35. cookieStr += config.domain ? '; domain=' + config.domain : '';
  36. cookieStr += config.secure ? '; secure' : '';
  37. cookieStr += config.httpOnly ? ';httpOnly' : '';
  38. }
  39. document.cookie = cookieStr;
  40. }
  41. /**
  42. * 获取cookie
  43. * @param name
  44. * @returns {
  45. {}|*}
  46. */
  47. function getCookie(name) {
  48. let cookieStrArr = document.cookie.split(';');
  49. let cookieObj = {
  50. };
  51. cookieStrArr.forEach(cookieStr => {
  52. let temp = cookieStr.split('=');
  53. let key = temp[0].trim();
  54. let value = temp[1];
  55. value = $.cookie.json ? JSON.parse(value) : value;
  56. value = $.cookie.raw ? value : decodeURIComponent(value);
  57. cookieObj[key] = value;
  58. });
  59. if(name) {
  60. return cookieObj[name];
  61. }else {
  62. return cookieObj;
  63. }
  64. }
  65. /**
  66. * 移除cookie
  67. * @param name
  68. * @param config
  69. */
  70. function removeCookie(name,config) {
  71. //过期时间设为以前的时间就是删除cookie
  72. config.expires = -1;
  73. addCookie(name,null,config);
  74. }
  75. $.extend({
  76. /**
  77. * 设置,获取或移除cookie
  78. * @param name
  79. * @param value
  80. * @param config
  81. */
  82. cookie: function (name,value,config) {
  83. if(value) {
  84. addCookie(name,value,config);
  85. }else if(value == null) {
  86. removeCookie(name,null,config);
  87. }else {
  88. getCookie(name);
  89. }
  90. },
  91. /**
  92. * 移除cookie
  93. * @param name
  94. * @param config
  95. * @returns {boolean}
  96. */
  97. removeCookie(name,config) {
  98. if(getCookie(name)) {
  99. removeCookie(name,config);
  100. return true;
  101. }else {
  102. return false;
  103. }
  104. }
  105. });
  106. /**
  107. * 默认值:false。
  108. 默认情况下,读取和写入 cookie 的时候自动进行编码和解码(使用 encodeURIComponent 编码,decodeURIComponent 解码)。要关闭这个功能设置 raw:true 即可:
  109. * @type {boolean}
  110. */
  111. $.cookie.raw = false;
  112. /**
  113. * 默认值:false。
  114. * 设置 cookie 的数据使用 json 存储与读取,这时就不需要使用 JSON.stringify 和 JSON.parse 了。
  115. * @type {boolean}
  116. */
  117. $.cookie.json = false;

发表评论

表情:
评论列表 (有 0 条评论,294人围观)

还没有评论,来说两句吧...

相关阅读

    相关 js修炼——全屏滚动

    全屏滚动是目前网站开发常用的效果,笔者也曾使用过类似插件,但是对此类插件的开发一直抱有强烈兴趣,而今在前人的经验指导下,终于领悟到了一些插件开发的思维。 如下效果: ![2

    相关 Mybatis分页

        之前涉及到mybatis分页时,都是先查询一遍总和,再用Limit,导致了项目中有大量的冗余代码,非常的难看,网上不管是框架,还是人家提到的各种自以为是的解决办法,基本