JAVA学习笔记_cookie.setPath()_setDomain()跨域共享

来源:互联网 发布:足彩分析软件app 编辑:程序博客网 时间:2024/06/05 09:51

转自:
http://blog.sina.com.cn/s/blog_8f61bd170100xe4d.html
http://www.cnblogs.com/keyi/p/6122438.html

1. JSP中Cookie的读写
Cookie的本质是一个键值对,当浏览器访问web服务器的时候写入在客户端机器上,里面记录一些信息。Cookie还有一些附加信息,比如域名、有效时间、注释等等。

下面是一个jsp中写入读取Cookie的测试:在顶级域名中写入Cookie,在子域名中读取,目的是实现一个分布系统的单点登录。
两个jsp中读写代码如下:

写入:

<% Cookie cookie = newCookie("write","cookie_write"); cookie.setComment("这是一个Cookie写入测试!"); cookie.setVersion(100); cookie.setMaxAge(3600); cookie.setDomain(".iisp.com"); response.addCookie(cookie); %>

读取

<% Cookie cookies[]=request.getCookies(); out.println(" cookie的数量为:"+ cookies.length); out.println("<br>"+"<br>"); for(inti = 0;i<cookies.length;i++){ out.println("getName="+cookies[i].getName()+"<br>"); out.println("getValue="+cookies[i].getValue()+"<br>"); out.println("getComment="+cookies[i].getComment()+"<br>"); out.println("getDomain="+cookies[i].getDomain()+"<br>"); out.println("getPath="+cookies[i].getPath()+"<br>"); out.println("getMaxAge="+cookies[i].getMaxAge()+"<br>"); out.println("getVersion="+cookies[i].getVersion()+"<br>"); out.println("getSecure="+cookies[i].getSecure()+"<br>"); out.println("<br>"+"<br>"); } %> 

测试结果表明:Cookied的写入读取均没有问题,并且Cookie的访问和域名有密切关系。子域名下可以读取到上级域名的Cookie。而不能读取到其他域名下的Cookie。


正常的cookie只能在一个应用中共享,即一个cookie只能由创建它的应用获得。
2.可在同一应用服务器内共享方法:设置cookie.setPath(“/”);

  本机tomcat/webapp下面有两个应用:cas和webapp_b,    1)原来在cas下面设置的cookie,在webapp_b下面获取不到,path默认是产生cookie的应用的路径。    2)若在cas下面设置cookie的时候,增加一条cookie.setPath("/");或者cookie.setPath("/webapp_b/");就可以在webapp_b下面获取到cas设置的cookie了。    3)此处的参数,是相对于应用服务器存放应用的文件夹的根目录而言的(比如tomcat下面的webapp),因此cookie.setPath("/");之后,可以在webapp文件夹下的所有应用共享cookie,而cookie.setPath("/webapp_b/");是指cas应用设置的cookie只能在webapp_b应用下的获得,即便是产生这个cookie的cas应用也不可以。    4)设置cookie.setPath("/webapp_b/jsp")或者cookie.setPath("/webapp_b/jsp/")的时候,只有在webapp_b/jsp下面可以获得cookie,在webapp_b下面但是在jsp文件夹外的都不能获得cookie。    5)设置cookie.setPath("/webapp_b");,是指在webapp_b下面才可以使用cookie,这样就不可以在产生cookie的应用cas下面获取cookie了    6)有多条cookie.setPath("XXX");语句的时候,起作用的以最后一条为准。

3.跨域共享cookie的方法:设置cookie.setDomain(“.jszx.com”);

    A机所在的域:home.langchao.com,A有应用cas    B机所在的域:jszx.com,B有应用webapp_b    1)在cas下面设置cookie的时候,增加cookie.setDomain(".jszx.com");,这样在webapp_b下面就可以取到cookie。    2)这个参数必须以“.”开始。    3)输入url访问webapp_b的时候,必须输入域名才能解析。比如说在A机器输入:http://lc-bsp.jszx.com:8080/webapp_b,可以获取cas在客户端设置的cookie,而B机器访问本机的应用,输入:http://localhost:8080/webapp_b则不可以获得cookie。    4)设置了cookie.setDomain(".jszx.com");,还可以在默认的home.langchao.com下面共享。

通常,cookie却不能跨越域传递,只有那些创建它的域才能访问,同一根域名下的二级域名,三级域名可以直接共享。但你可以利用重定向来间接的获取cookies。

原创粉丝点击