日期:2014-05-16  浏览次数:20472 次

jsp p3p跨域设置cookie
网上现在有很多关于跨域设置cookie的文章,但大多数都是php的文章,网上仍然有很多关于jsp p3p的设置,但是必须要将浏览器的隐私设置成低才可以跨域设置cookie.查了n多文章发现他们都搞错了!(真郁闷死了,自己没有解决干什么要贴在自己的博客中?!害得我好惨!^@^)
下面是一个例子:
首先在hosts文件中设置(其中的192.168.73.1为您本机的ip,我写成127.0.0.1不行,可能是公司的域的设置问题)
192.168.73.1       www.a.com
192.168.73.1       www.b.com
[1]编写文件
b_setcookie.jsp
<%@ page contentType="text/html; charset=utf-8" %>
<% 
   response.addHeader("Cache-Control", "no-cache");
   response.addHeader("Expires", "Thu, 01 Jan 1970 00:00:01 GMT"); 
   String ssocookie="www.sso12345678910.com";
 %>
<script src="http://www.a.com/mp/test/a_setcookie.jsp?id=<%=ssocookie%>">
</script>

a_setcookie.jsp
<%
response.setHeader("P3P","CP=\"CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR\"");
String domainId=request.getParameter("id");
Cookie _cookie=new Cookie("test",domainId);
_cookie.setMaxAge(30*60*100); 
_cookie.setPath("/");
response.addCookie(_cookie);
%>

a_getcookie.jsp
<%@ page contentType="text/html; charset=utf-8" %>
<%
   Cookie cookies[]=request.getCookies(); // 将适用目录下所有Cookie读入并存入cookies数组中
 
   Cookie sCookie=null; 
   String sname=null;
   String name=null;
   if(cookies==null) // 如果没有任何cookie
     out.print("none any cookie");
   else
   {
     out.print(cookies.length + "<br>");
     for(int i=0;i<cookies.length; i++) // 循环列出所有可用的Cookie
     {
       sCookie=cookies[i];
       sname=sCookie.getName();
       name = sCookie.getValue();
       out.println("comment==>>>"+sCookie.getComment()+"\n");
       out.println("getDomain==>>>"+sCookie.getDomain()+"\n");
       out.println("getSecure==>>"+sCookie.getSecure()+"\n");
       out.println("getVersion==>>"+sCookie.getVersion()+"\n");
       out.println("cookiename==>>"+sname + "->" + "cookievalue==>>>"+name + "<br>");
     }
   } 
%>

测试时依次请求
http://www.b.com/mp/test/b_setcookie.jsp
http://www.a.com/mp/test/a_getcookie.jsp
便可看到通过跨域设置的cookie的值!

1 楼 orc_chan 2008-06-12  
response.setHeader("P3P","CP=\"CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR\""); 


这一句好象没什么用,事实上在我的机器上加不加这句效果是一样的,我的浏览器是IE 6.0
2 楼 wang.java 2008-11-17  
3 楼 spook99 2009-02-19  
小弟有些糊涂,楼主的方法是不是通过http://www.b.com/传递cookies参数,www.a.com域接受参数写cookies.这样是否叫跨域取cookies?

如果通过这种方法,写不写以下这句均生效
response.setHeader("P3P","CP=\"CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR\"");


不知道小弟说的对不对,忘楼主明示

我的QQ 119039097 
4 楼 zhuxinping 2009-05-07  
根本就跨域。
5 楼 zhuxinping 2009-05-07  
根本就跨域。
6 楼 城的灯 2011-06-15  
哎,好像这是一篇悲催的文章。
7 楼 nothing0318 2011-08-16  
晕。。。。这也叫跨域? 偷换概念啊
8 楼 javafan_303 2011-08-23  
nothing0318