热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在jsp页面的js中使用Cookie的原理介绍以及相应方法的代码

1.设置cookie1.1每个cookie都是一个名值对,可以把下面这样一个字符串赋值给document.cookie:1document.cook

1. 设置COOKIE
  1.1 每个COOKIE都是一个名/值对,可以把下面这样一个字符串赋值给document.COOKIE: 

1 document.COOKIE="user_Id=828";

  1.2 如果要一次存储多个名/值对,可以使用分号加空格(; )隔开,例如: 

1 document.COOKIE="user_Id=828; user_Name=hulk";

  1.3 COOKIE的名或值中不能使用分号(;)、逗号(,)、等号(=)以及空格。在COOKIE的名中做到这点很容易,但要保存的值是不确定的。如何来存储这些值呢?

    方法是用escape()函数进行编码,它能将一些特殊符号使用十六进制表示,例如空格将会编码为“20%”,从而可以存储于COOKIE值中,而且使用此种方案还可以避免中文乱码的出现。例如:  

1 document.COOKIE="str="+escape("I love you");
2 //等价于:
3 document.COOKIE="str=I%20love%20you";

    当使用escape()编码后,在取出值以后需要使用unescape()进行解码才能得到原来的COOKIE值,如果没有空格和汉字应该可以直接显示正确的值,具体遇到再试试吧。

  1.4 COOKIEs就像一个大盒子,里面又有好多小盒子,如下例子,document.COOKIE相当于找到大盒子,name相当于将一个小盒子起个名字,name=value相当于将value放到名为name的小盒子中,可以同时存在多个名字不同的小盒子,如下写法可以存多个值:

1 document.COOKIE="name=value";
2 document.COOKIE="name1=value1";
3 document.COOKIE="name2=value2";
4 ...

   1.5 如果要改变一个COOKIE的值,只需重新赋值,如下代码这样获取到的COOKIEs值为"222",而不是"111"(获取问题后面说)。:

1 document.COOKIE="user_Id=111";
2 document.COOKIE="user_Id=222";

2. 获取COOKIE的值

  2.1 COOKIE的值可以由document.COOKIE直接获得,写法如下代码所示,但是这将获得以分号隔开的多个键/值对所组成的字符串,这些键/值对包括了该域名下的所有COOKIE,

1 var strCOOKIE=document.COOKIE;//获取该域名下所有COOKIEs
2 alert(strCOOKIE);//弹窗显示

   2.2 如方法上方法中,虽然能获取到的COOKIE,但是用户必须自己分析这个字符串,来获取指定的COOKIE值,比较麻烦,这时有第二种方法,在最后有说明,也给出了代码,简单说就是设置个方法,直接调用,急用的朋友可以直接到最后看。

 3. 给COOKIE设置终止日期  

  不设置终止时间的COOKIEs都属于单会话COOKIE,即浏览器关闭后这些COOKIE将会被清除,因为会话COOKIE是存在内存中的。

  在实际开发中,COOKIE常常需要长期保存,例如保存用户登录的状态,记住密码,页面设置等信息。这可以用下面的选项来实现: 

1 document.COOKIE="user_Id=111; expires=GMT_String";

  其中GMT_String是以GMT格式表示的时间字符串,这条语句就是将userId这个COOKIE设置为GMT_String表示的过期时间,超过这个时间,COOKIE将会被自动删除,访问不到。例如:

  如果要将COOKIE设置为10天后过期,可以这样实现:

1

 

4. 删除COOKIE
  COOKIEs没有直接删除的语句(我没找到,哪位大神知道求告知...),为了达到删除指定COOKIE的方法,可以将其过期时间设定为一个过去的时间,例如:

1

5. 指定可访问COOKIE的路径

    默认情况下,如果在某个页面创建了一个COOKIE,那么该页面所在目录中的其他页面也可以访问该COOKIE。如果这个目录下还有子目录,则在子目录中也可以访问。

  例如在 www.xxxx.com/total/main.jsp 中所创建的COOKIE,可以被 www.xxxx.com/total 或 www.xxxx.com/total/some/c.jsp所访问,但不能被www.xxxx.com/d.html访问。

  为了控制COOKIE可以访问的目录,需要使用path参数设置COOKIE,语法如下: 

1 document.COOKIE="name=value; path=/total";

  其中total表示可访问COOKIE的目录。例如: 

1 document.COOKIE="user_Id=111; path=/page";

       表示当前COOKIE仅能在page目录下使用。

  如果要使COOKIE在整个网站下可用,可以将COOKIE的path指定为根目录,例如: 

1 document.COOKIE="userId=111; path=/";

6. 指定可访问COOKIE的主机名(这部分没有亲自实践,一般不这样用)

  和路径类似,主机名是指同一个域下的不同主机,例如:www.baidu.com和www.google.com就是两个不同的主机名。默认情况下,一个主机中创建的COOKIE在另一个主机下是不能被访问的,但可以通过domain参数来实现对其的控制,其语法格式为:

document.COOKIE="name=value;domain=COOKIEDomain";

 以google为例,要实现跨主机访问,可以写为:

1 document.COOKIE="name=value;
2 domain=.google.com";

 这样,所有google.com下的主机都可以访问该COOKIE。

 

 

参考网上的例子,以及自己实践所得,写了一个获取和存储COOKIE的js方法,使用还是挺方便的,COOKIE是真的好用,由于js使用session比较麻烦,写页面还是COOKIE实用

主要参考这位道友的文章,修改了一些表述方式,挂上链接,大家可以做对比参考,链接:http://www.cnblogs.com/Jackie-sky/p/3672544.html

综合示例:COOKIE设置较为复杂,但是使用频率高,并具有一定的相似性。因此可以定义几个函数来完成COOKIE的通用操作,从而实现代码的复用。下面列出了常用的COOKIE操作及其函数实现,需要的朋友可以复制走,放到自己的项目就好了。

 

1 /*创建COOKIE 无属性*/
2 function SetCOOKIE(name,value){//键/值
3 //默认传值,不设置任何变量
4   document.COOKIE=name+"="+escape(value);
5 }
6 /*创建COOKIE 设置访问路径*/
7 function SetCOOKIEPath(name,value){//键/值
8 //将COOKIE设置为根目录下的所有页面可以访问,具体项目可以自己更改
9   document.COOKIE=name+"="+escape(value)+";path=/";
10 }
11
12 /*创建COOKIE 设置失效时间*/
13 function SetCOOKIETime(name,value,expireHours){//键/值/时间(天)
14   var COOKIEString=name+"="+escape(value);
15   var date=new Date();
16 date.setTime(date.getTime+expireHours*24*60*60*1000);
17 COOKIEString=COOKIEString+";expire="+date.toGMTString();
18 document.COOKIE=COOKIEString;
19 }
20
21 /*创建COOKIE 同时设置访问路径和失效时间*/
22 function SetCOOKIETimePath(name,value,expireHours){//键/值/时间(天)
23 //将COOKIE设置为根目录下的所有页面可以访问,并且有时间限制,具体项目可以自己更改
24 var COOKIEString=name+"="+escape(value);
25 var date=new Date();
26 date.setTime(date.getTime+expireHours*24*60*60*1000);
27 COOKIEString=COOKIEString+";expire="+date.toGMTString();
28 COOKIEString=COOKIEString+";path=/"//具体项目可更改path值
29 document.COOKIE=COOKIEString;
30 }
31 /*根据COOKIE的键查询COOKIE*/
32 function GetCOOKIE(name){//要查询的键
33   var arr,reg=new RegExp("(^|)"+name+"=([^;]*)(;|$)");
34   if(arr=document.COOKIE.match(reg))
35   return unescape(arr[2]);
36   else
37   return null;
38 }
39
40 /*根据COOKIE的键删除COOKIE*/
41 function DeleteCOOKIE(name){//要删除的键名
42   var date=new Date();
43   date.setTime(date.getTime()-10000);
44   document.COOKIE=name+"=v; expire="+date.toGMTString();
45 }

 

转:https://www.cnblogs.com/xichuanggushi/p/7612961.html



推荐阅读
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • SQLmap自动化注入工具命令详解(第28-29天 实战演练)
    SQL注入工具如SQLMap等在网络安全测试中广泛应用。SQLMap是一款开源的自动化SQL注入工具,支持12种不同的数据库,具体支持的数据库类型可在其插件目录中查看。作为当前最强大的注入工具之一,SQLMap在实际应用中具有极高的效率和准确性。 ... [详细]
  • HTML5 Web存储技术是许多开发者青睐本地应用程序的重要原因之一,因为它能够实现在客户端本地存储数据。HTML5通过引入Web Storage API,使得Web应用程序能够在浏览器中高效地存储数据,从而提升了应用的性能和用户体验。相较于传统的Cookie机制,Web Storage不仅提供了更大的存储容量,还简化了数据管理和访问的方式。本文将从基础概念、关键技术到实际应用,全面解析HTML5 Web存储技术,帮助读者深入了解其工作原理和应用场景。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • Unity3D 中 AsyncOperation 实现异步场景加载及进度显示优化技巧
    在Unity3D中,通过使用`AsyncOperation`可以实现高效的异步场景加载,并结合进度条显示来提升用户体验。本文详细介绍了如何利用`AsyncOperation`进行异步加载,并提供了优化技巧,包括进度条的动态更新和加载过程中的性能优化方法。此外,还探讨了如何处理加载过程中可能出现的异常情况,确保加载过程的稳定性和可靠性。 ... [详细]
  • 在Eclipse中提升开发效率,推荐使用Google V8插件以增强Node.js的调试体验。安装方法有两种:一是通过Eclipse Marketplace搜索并安装;二是通过“Help”菜单中的“Install New Software”,在名称栏输入“googleV8”。此插件能够显著改善调试过程中的性能和响应速度,提高开发者的生产力。 ... [详细]
  • 深入解析Java虚拟机的内存分区与管理机制
    Java虚拟机的内存分区与管理机制复杂且精细。其中,某些内存区域在虚拟机启动时即创建并持续存在,而另一些则随用户线程的生命周期动态创建和销毁。例如,每个线程都拥有一个独立的程序计数器,确保线程切换后能够准确恢复到之前的执行位置。这种设计不仅提高了多线程环境下的执行效率,还增强了系统的稳定性和可靠性。 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • POJ 2482 星空中的星星:利用线段树与扫描线算法解决
    在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ... [详细]
  • 本指南详细介绍了如何在CentOS 6.6 64位系统上以root用户身份部署Tomcat 8服务器。系统环境为CentOS 6.6 64位,采用源码安装方式。所需软件为apache-tomcat-8.0.23.tar.gz,建议将软件下载至/root/opt目录。具体下载地址请参见官方资源。本指南涵盖了从环境准备到服务启动的完整步骤,适用于需要在该系统环境下搭建高性能Web应用服务器的技术人员。 ... [详细]
  • 本文深入探讨了ASP.NET中ViewState、Cookie和Session三种状态管理技术的区别与应用场景。ViewState主要用于保存页面控件的状态信息,确保在多次往返服务器过程中数据的一致性;Cookie则存储在客户端,适用于保存少量用户偏好设置等非敏感信息;而Session则在服务器端存储数据,适合处理需要跨页面保持的数据。文章详细分析了这三种技术的工作原理及其优缺点,并提供了实际应用中的最佳实践建议。 ... [详细]
  • 在进行前端JavaScript国际化(i18n)的过程中,为了从cookie中获取语言信息并动态加载相应资源,我决定将语言检测逻辑和i18n初始化代码直接嵌入到index页面中,使用了Velocity模板引擎的语法。这种方法不仅简化了代码结构,还提高了语言切换的灵活性和响应速度。 ... [详细]
author-avatar
泉州联合网2534
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有