Jsp中操作Cookie及跨域访问的详细测试
js获取cookie值的方法

js获取cookie值的方法JavaScript是一种广泛应用于网页开发的脚本语言,它可以实现很多有趣和实用的功能。
其中,获取cookie值是JavaScript中的一个重要操作,因为cookie是在用户浏览器中存储的一些信息,可以用来实现用户登录状态的保持、用户偏好设置的保存等功能。
接下来,我们就来详细介绍一下在JavaScript中获取cookie值的方法。
首先,我们需要了解一下cookie是什么以及它的结构。
在JavaScript中,我们可以通过document.cookie来获取当前页面的所有cookie。
这个属性返回的是一个字符串,其中包含了所有的cookie信息,格式为键值对的形式,各个键值对之间用分号加空格("; ")分隔。
比如,一个典型的cookie字符串可能是这样的,"username=JohnDoe; expires=Thu, 18 Dec 2023 12:00:00 UTC; path=/"。
在这个例子中,我们可以看到有一个名为username的cookie,它的值是JohnDoe,还有一个expires和path的属性。
接下来,我们就来介绍一下如何在JavaScript中获取cookie 的值。
获取cookie值的一般方法是先通过document.cookie获取所有cookie信息,然后再从中筛选出我们需要的那个cookie的值。
下面我们就来介绍一下几种常用的方法。
第一种方法是使用正则表达式来匹配我们需要的cookie值。
我们可以先通过document.cookie获取所有cookie信息,然后使用正则表达式来匹配我们需要的那个cookie的值。
比如,如果我们需要获取名为username的cookie的值,我们可以使用下面的代码来实现:```javascript。
function getCookieValue(cookieName) {。
js-cookie的使用domain用法

js-cookie的使用domain用法JS-Cookie是一个简便易用的JavaScript库,用于在浏览器中设置和获取HTTP cookies。
当我们设置一个cookie时,它会存储在用户的浏览器中,并且每次用户访问网站时都会被发送到服务器。
domain属性用于设置cookie的域名。
通过设置domain属性,我们可以控制cookie在哪些域名下可用。
然而,有时我们希望cookie在跨域名访问时也可用。
这是我们可以使用domain属性。
通过设置cookie的domain属性,我们可以指定cookie在多个域名下可用。
下面是JS-Cookie的用法示例:```javascript// 设置cookie// 获取cookievar value = Cookies.get('name');``````javascript// 设置cookie在所有子域名下可用```需要注意的是,当我们设置domain属性时,需要确保它与当前网站的域名匹配。
否则,浏览器会忽略这个cookie。
另外,还需要注意的是,使用domain属性设置的cookie并不是绝对安全的。
因为当我们指定一个较大的域名范围时,其他网站也可以访问该cookie。
因此,我们应该谨慎使用domain属性,确保我们只将cookie设置为在需要的域名下可用。
总结:- 通过设置domain属性,我们可以控制cookie在哪些域名下可用。
- 可以使用具体的域名,或者使用通配符来设置domain属性。
- 使用domain属性时要确保与当前网站的域名匹配。
- 谨慎使用domain属性,确保cookie只在需要的域名下可用。
获取cookie的方法

获取cookie的方法
获取Cookie的方法可以通过以下几种方式:
1. 使用浏览器开发者工具:在浏览器中打开开发者工具,切换到"Network"或"网络"选项卡,在发送请求的过程中,可以在"Headers"或"请求头"中找到"Cookie"字段,复制即可。
2. 使用JavaScript:在浏览器的控制台中执行以下代码即可获取当前页面的Cookie信息:
console.log(document.cookie);
3. 使用服务器端编程语言:不同的服务器端编程语言提供了获取Cookie的方法。
以下是一些常见的示例:
- 在PHP中,可以使用`_COOKIE`全局变量来获取Cookie的值。
例如:
cookieValue = _COOKIE['cookiename'];
- 在Python的Django框架中,可以使用`request.COOKIES`来获取Cookie
的值。
例如:
cookie_value = request.COOKIES.get('cookiename')
- 在Node.js中,可以使用`req.cookies`对象来获取Cookie的值。
例如:var cookieValue = req.cookies.cookiename;。
通过设置P3P头来实现跨域访问COOKIE

聚合后,返回一个重定向页面到 app 的某个 URL,由该 URL 设置 app cookieD. 此时浏览器上可看见的页面容器实际上也是可以和重定向回来的内容交互的。
比如可以用 js 控制发现重定向页面成功返回后,就刷新整个页面,让它看起来和用户登录后访问没有什么区别。
下面是真正的技巧:怎样才能在 IE 里面跨域去设置 cookie上述技术看起来是不是很好?但它的前提是所有的登录都 post 到 sso server 上,认证成功后再返回 app 页面。
可我接受到的需求之一就是要支持页面无刷新登录。
哈!就是说本来在 上提交登录表单的 action 应该是 这个 sso server。
可是在 AJAX 大潮下,chinaren 计划采用 XMLHTTPRequest 提交,这个就麻烦了,因为是不能跨域来提交的。
那么解决方法就是跨域产生 cookie,即 js 发现口令校验成功后,再在 上种上合法的 cookie.套用上面的跨域读 cookie 的方案似乎很简单去推论:就是创建一个隐含的 iframe,让那个iframe 去调用 的 URL 来产生 cookie。
很遗憾,此方法在 Fx 下工作的很好,但是不能在 IE 上应用。
(在 IE 状态栏上显示 cookie 隐私警告,红色圆底白横杠)我试了很多很多方法,包括创建 、 node,包括用 js 设置,但都一次次被 IE 无情的挡在了浏览器外。
google 之,也没有任何真正可用的答案,中文网页要么介绍的方法是错的,要么说无解。
最后还是在 chinaren 一哥们的帮助下,翻出了他们所使用的,以和 交互的方法(不知道是哪位牛人发现的),只需要设置 P3P HTTP Header,在隐含 iframe 里面跨域设置 cookie 就可以成功。
他们所用的内容是:P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"最后是我做的一个小小的演示:cookie 怎么在 和 之间交互1. /cookie.php2. 随便输入什么,点 reset cookie,就可以看到 的 cookie 已经被设上了。
cookie面试题

cookie面试题一、什么是Cookie面试题Cookie面试题是指在招聘过程中常见的与Cookie相关的问题,用于测试候选人对于Cookie的理解和应用能力。
在一些技术岗位的面试中,经常会出现与Cookie有关的面试题,因为Cookie是Web开发中非常重要的概念之一。
二、Cookie面试题的分类根据Cookie的特性和应用场景,Cookie面试题可以分为以下几类:1. 什么是Cookie?这类问题是对候选人对Cookie基本概念的了解进行考察,通常会涉及Cookie的定义、作用、存储方式等。
2. Cookie的工作原理是什么?这类问题是对候选人对Cookie实现原理的掌握程度进行考察,通常会涉及Cookie的生成、发送、存储和读取过程。
3. Cookie和Session的区别是什么?这类问题是对候选人对Cookie和Session的了解程度进行考察,通常会比较Cookie和Session在存储方式、有效期、安全性等方面的区别。
4. 如何使用Cookie实现用户登录状态的保持?这类问题是对候选人对Cookie在用户登录状态保持方面的应用能力进行考察,通常候选人需要介绍使用Cookie来实现用户登录状态保持的步骤和原理。
5. 如何解决Cookie跨域问题?这类问题是对候选人对Cookie跨域访问限制的理解和解决方案的能力进行考察,通常候选人需要介绍跨域访问限制的原因和解决方案。
三、如何准备Cookie面试题准备Cookie面试题需要注意以下几点:1. 对Cookie的基本概念和工作原理进行充分了解在面试前,候选人应该对Cookie的定义、作用、存储方式、工作原理等基本概念进行充分了解,并能够清楚地表达出来。
2. 理解Cookie与Session的区别Cookie和Session是Web开发中常用的会话管理机制,候选人应该清楚它们的区别并能够简明扼要地解释出来。
3. 掌握Cookie的应用场景和常见问题除了基本概念和工作原理,候选人还应该关注Cookie在实际开发中的应用场景和常见问题,例如如何保证Cookie的安全性、如何处理Cookie过期等。
js获取cookie值的方法

js获取cookie值的方法JavaScript获取cookie值的方法。
在Web开发中,我们经常需要使用cookie来存储和获取用户的信息。
而JavaScript作为前端开发的重要工具,也提供了多种方法来获取cookie的值。
本文将介绍几种常用的JavaScript获取cookie值的方法,希望能对你有所帮助。
方法一,使用document.cookie。
JavaScript中最简单的获取cookie值的方法就是使用document.cookie属性。
该属性返回当前文档的所有cookie,格式为键值对的字符串,我们可以通过解析字符串来获取特定的cookie值。
示例代码如下:```javascript。
function getCookie(name) {。
var cookieArr = document.cookie.split("; ");for (var i = 0; i < cookieArr.length; i++) {。
var arr = cookieArr[i].split("=");if (arr[0] === name) {。
return arr[1];}。
}。
return "";var username = getCookie("username");console.log(username);```。
方法二,使用正则表达式。
除了使用split方法来解析document.cookie字符串外,我们还可以使用正则表达式来获取特定的cookie值。
这种方法通常更灵活,能够更精确地匹配cookie名称。
示例代码如下:```javascript。
function getCookie(name) {。
var reg = new RegExp("(^| )"+name+"=([^;])(;|$)");var arr = document.cookie.match(reg);if (arr) {。
JS跨域(Access-Control-Allow-Origin)前后端解决方案详解

JS跨域(Access-Control-Allow-Origin)前后端解决⽅案详解浏览器的同源安全策略同源策略,它是由Netscape提出的⼀个著名的安全策略。
现在所有⽀持JavaScript的浏览器都会使⽤这个策略。
所谓同源是指,域名,协议,端⼝相同。
同源策略是浏览器的⾏为,是为了保护本地数据不被JavaScript代码获取回来的数据污染,因此拦截的是客户端发出的请求回来的数据接收,即请求发送了,服务器响应了,但是⽆法被浏览器接收。
同源:协议 + 域名 + 端⼝。
所以,怎么才算跨域呢?什么是跨域什么是跨域,简单地理解就是因为JavaScript同源策略的限制, 域名下的js⽆法操作或是域名下的对象。
更详细的说明可以看下表:URL说明是否允许通信/a.js/b.js同⼀域名下允许/lab/a.js/script/b.js同⼀域名下不同⽂件夹允许:8000/a.js/b.js同⼀域名,不同端⼝不允许/a.jshttps:///b.js同⼀域名,不同协议不允许/a.jshttp://70.32.92.74/b.js域名和域名对应ip不允许/a.js/b.js主域相同,⼦域不同不允许/a.js/b.js同⼀域名,不同⼆级域名(同上)不允许(cookie这种情况下也不允许访问)///a.js/b.js不同域名不允许特别注意两点:第⼀,如果是协议和端⼝造成的跨域问题“前台”是⽆能为⼒的,第⼆:在跨域问题上,域仅仅是通过“URL的⾸部”来识别⽽不会去尝试判断相同的ip地址对应着两个域或两个域是否在同⼀个ip上。
“URL的⾸部”指window.location.protocol +window.location.host,也可以理解为“Domains, protocols and ports must match”。
⼀、前端跨域解决⽅法(JavaScript)接下来简单地总结⼀下在“前台”⼀般处理跨域的办法1、document.domain+iframe的设置上的a.htmldocument.domain = '';var ifr = document.createElement('iframe');ifr.src = '/b.html';ifr.style.display = 'none';document.body.appendChild(ifr);ifr.onload = function(){var doc = ifr.contentDocument || ifr.contentWindow.document;// 在这⾥操纵b.htmlalert(doc.getElementsByTagName("h1")[0].childNodes[0].nodeValue);};上的b.htmldocument.domain = '';这种⽅式适⽤于{, , , }中的任何页⾯相互通信。
jsp测试题及答案

jsp测试题及答案一、单选题(每题2分,共10分)1. JSP页面中,用于声明变量、方法等的指令是:A. `<%@ page %>`B. `<%@ include %>`C. `<%! ... %> `D. `<% ... %>`答案:C2. JSP中,以下哪个对象用于获取客户端请求信息?A. requestB. responseC. sessionD. application答案:A3. 在JSP页面中,以下哪个元素用于包含其他JSP页面?A. `<jsp:forward page="other.jsp" />`B. `<jsp:include page="other.jsp" />`C. `<%@include file="other.jsp"%>`D. `<%@ page import="other.jsp" %>`答案:B4. JSP页面中,以下哪个指令用于设置页面的默认内容类型和编码?A. `<%@ page contentType="text/html; charset=UTF-8" %>`B. `<%@ page import="java.io.*" %>`C. `<%@ page session="true" %>`D. `<%@ page language="java" %>答案:A5. 在JSP中,以下哪个对象用于向客户端发送响应?A. requestB. responseC. sessionD. application答案:B二、多选题(每题3分,共15分)1. JSP页面中,以下哪些指令用于控制页面的属性?A. `<%@ page %>`B. `<%@ include %>`C. `<%@ taglib %>`D. `<%@ page import %>`E. `<%@ page session="true" %>`答案:A, C, D, E2. 在JSP页面中,以下哪些对象是隐式对象?A. requestB. responseC. outD. sessionE. application答案:A, B, C, D, E3. JSP页面中,以下哪些指令用于导入Java类或包?A. `<%@ page import="java.util.*" %>`B. `<%@ page contentType="text/html; charset=UTF-8" %>`C. `<%@ page session="true" %>`D. `<%@ include file="other.jsp" %>`E. `<%@ page language="java" %>`答案:A, E4. 在JSP页面中,以下哪些元素用于条件判断?A. `<% if (condition) { %> ... <% } %>`B. `<%@ if (condition) { %> ... <%@ } %>`C. `<% while (condition) { %> ... <% } %>`D. `<% for (int i = 0; i < 10; i++) { %> ... <% } %>`E. `<%@ for (int i = 0; i < 10; i++) { %> ... <%@ } %>` 答案:A, C, D5. JSP页面中,以下哪些对象用于会话管理?A. requestB. responseC. sessionD. applicationE. out答案:C, D三、简答题(每题5分,共20分)1. 简述JSP页面的生命周期。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
做J2EE开发已经好几年了,对cookie的了解仅限于知道其使用方式、优缺点及一些简单的基本原理,工作中有些项目也使用cookie,基本上都是用于记录用户的登录信息(有很多知名网站用于记录客户个人信息或访问习惯的鄙视一下),再次访问时不需要再次登录,由于我是做企业应用的,因此一般cookie也会用于做sso的方案,这个确实非常方便,尤其是多机集群环境下,一个节点宕机,只要有另一个节点能提供服务,用户就不会有所感知,避免了session复制这种重量级方案。
网上关于cookie的资料比较多也比较杂,有讨论用各种语言操作cookie的,也有讨论用cookie如何实现sso的,也有变相实现cookie跨域访问的方案,今天准备用java/jsp做一个cookie操作的完整测试,一方面加深印象,一方面给做企业应用的新手朋友一个指引,只要耐心将下边各个测试过程跟下来,保证你对cookie会有一个更深层次的认识。
多的不说了,测试环境JDK1.5 + Eclipse3.6 + Tomcat5.0.28测试过程如下:开发2个web应用,分别为web1和web2,web1应用的web根下创建一个index.jsp,内容如下:<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd"><%Cookie[] cookies = request.getCookies();if(cookies != null && cookies.length > 0){for(int i=0;i<cookies.length;i++){Cookie cookie = cookies[i];System.out.println("web1----cookie name:"+cookie.getName()+" value:"+cookie.getValue());if("myCookieName".equals(cookie.getName())){//如果cookie已存在则删除掉cookie.setMaxAge(0);response.addCookie(cookie);}}}//用java代码创建cookie的方法如下,构造的参数是cookie的name和valueCookie cookie = new Cookie("myCookieName","myCookieValue1");cookie.setPath("/");response.addCookie(cookie);%><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>This is web1's index.jsp</body></html>web2应用的web根下创建一个index.jsp,内容如下:<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd"><%Cookie[] cookies = request.getCookies();if(cookies != null && cookies.length > 0){for(int i=0;i<cookies.length;i++){Cookie cookie = cookies[i];System.out.println("web1----cookie name:"+cookie.getName()+" value:"+cookie.getValue());if("myCookieName".equals(cookie.getName())){//如果cookie已存在则删除掉cookie.setMaxAge(0);response.addCookie(cookie);}}}%><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>This is web2's index.jsp</body></html>2个应用基本一样,web1负责获取系统中的cookie然后输出name和value到控制台,并创建一个cookie,web2则只获取cookie然后输出name和value到控制台,这两个应用功能非常好理解。
2个应用部署到一个tomcat下,端口为80,两个应用的访问路径分为别:http://127.0.0.1/web1 和http://127.0.0.1/web2 接下来是测试过程首先用IE8访问web1,为了看到我们创建的cookie,所以需要多刷新几下,这时控制台输出如下(去除重复项后):web1----name:JSESSIONID value:D402D19B22D8E3437ECF36785B0853E1web1----name:myCookieName value:myCookieValue1清空控制台日志,然后用IE8访问web2,这时控制台输出如下:web2----name:JSESSIONID value:3E7B632C0074FD5EBA409005271EAC9Cweb2----name:myCookieName value:myCookieValue1这时说明2个应用是共享cookie的,但此时并没有实现cookie的跨域访问以上同样的测试我换成了360浏览器,并且开启了2个360浏览器的实例(非多标签),诡异的一幕出现了,访问web2应用的时候无法获得web1应用创建的cookie了,试了好多方法都不行,后来用360浏览器多标签的方式:访问测试了一下结果发现从web2可以访问到web1创建的cookie了,回想当初学习cookie 知识的时候想到了一个细节,如果cookie的maxAge默认不设置的话,cookie默认是存储在浏览器的内存(缓存)当中的,web1创建的cookie就没有设置这个属性,因此得出360浏览器开启多个实例的情况下其各自都自己的内存空间,而IE8则不然,多标签或多实例都共用一个内存,那么如果想使用360浏览器多实例共享cookie的办法只有给cookie设置maxAge属性了(这样cookie会存储到磁盘中),因此web1的index.jsp代码调整了一下:Cookie cookie = new Cookie("myCookieName","myCookieValue1"); cookie.setPath("/");cookie.setMaxAge(180);//设置存活周期为3分钟response.addCookie(cookie);再次测试,发现web2已经可以访问到web1创建的cookie了,并且在3分钟后再次刷新web2应用发现cookie失效(补充一点,cookie的失效不需要服务器监控其生命周期,通常浏览器自己会处理),一切正常,至此第一个测试内容结束。
第二个测试内容开始,问题是这样,实际项目中客户不会使用ip地址访问应用系统的,一般都会设置域名,因此准备用域名访问一下我这两个应用,测试方式:在C:\WINDOWS\system32\drivers\etc的hosts文件中添加如下内容:127.0.0.1 这样在浏览器中访问时首先会到hosts文件中查找,找不到才会使用DNS 去解析,使用这种方法进行测试,分别访问:/web1和/web2结果也是一切正常,但通过httpwatch监控发现如果cookie不设置domain的话,默认则为当前域名,即:(记住这个,很重要),两个应用使用同一个域名,所以cookie同样可以共享,也证明了域名后边斜线之后的内容是不影响cookie的,至此第二个测试内容结束,这里也补充说一句如果你用代码获取cookie然后查看其maxAge、path、domain等属性发现它的值可能是null,这是由应用服务器内部实现类决定的,这不代表你存进去的也是null,通过httpwatch是可以查看到cookie这些属性值的。
第三个测试开始,与第二个类似,但域名要稍稍改变一下,在C:\WINDOWS\system32\drivers\etc的hosts文件中添加如下内容:127.0.0.1 127.0.0.1 然后使用IE8分别访问:/web1和/web2测试结果:web2应用无法访问到web1应用创建的cookie,原因如下:访问web1时cookie的domain没有设置,那么默认为,根据cookie不能跨域访问的规则,访问web2时域自然不能访问域的cookie,但其一(顶)级域名()是相同的,这时候有办法可以解决,即将web1的代码修改如下: Cookie cookie = new Cookie("myCookieName","myCookieValue1"); cookie.setPath("/");cookie.setMaxAge(180);//设置存活周期为3分钟cookie.setDomain(".myweb.co m");response.addCookie(cookie);分别访问web1和web2,一切正常,web2又可以访问的web1的cookie了,至此第三个测试结束,证明了一(顶)级域名相同的情况下,cookie是可以实现二级(三级以上也可以)域名应用跨域访问的。