日期:2014-05-17  浏览次数:20647 次

关于cookie跨域的问题求教
下面是我的跨域方式:
a工程:middle.jsp
<body>   
    
    <%
     Cookie[] cs=request.getCookies();
Cookie sCookie=null;
String user=null;
if(cs!=null){
for(int i=0;i<cs.length;i++){
sCookie=cs[i];  
if(sCookie!=null){
       if(("_USER").equals(sCookie.getName())){     
          user=sCookie.getValue();
       }
    }
    }}
String backurl=request.getParameter("backurl");
     response.addHeader("Cache-Control","no-cache");
     response.addHeader("Expires","Thu,01 Jan 1970 00:00:01 GMT");
     URLEncoder.encode(ulk,"utf-8");
     %>
     <script src="http://www.b.com/setCookie.jsp?user=<%=user %>"> </script>
     
     <script type="text/javascript">
      window.location="<%=backurl%>";
     </script>
  </body>

b工程:setCookie.jsp
<% 
response.setHeader("P3P","CP=\"NON DSP COR CURa ADMa DEVa TAIa PSAa PSDa IVAa IVDa CONa HISa TELa OTPa OUR UNRa IND UNI COM NAV INT DEM CNT PRE LOC\"");
    String user= request.getParameter("user");
     user=URLEncoder.encode(URLDecoder.decode(user, "utf-8"),"utf-8");
   
     Cookie _USER=new Cookie("_USER",user);
     _cookie.setPath("/");
     _cookie.setDomain(".b.com");
     response.addCookie(_USER);
 
    %>


通过这种方式是实现了在b.com 中取到_user这个cookie,问题是我在a工程中多了一步加载middle.jsp页面,然后才能跳转到backurl的页面。这样是极不友好的,我用ajax直接请求middle.jsp 无法在b中获取的cookie。同理我退出的时候也用这种方式,页面又要重新加载,用户体验极佳。
求更好的解决cookie跨域的方案呢?求大侠们指点迷津啊!!!!!
java web cookie p3p 跨域

------解决方案--------------------
这只是重新设置设置b站的cookie,算不上跨域

ajax请求url后返回的script是不会执行的,所以设置b域名的cookie的<script src="http://www.b.com/setCookie.jsp?user=<%=user %>"> </script>没有执行


你这个要求可以用jsonp来实现,原理参考参考这个:jQuery jsonp跨域原理


a站点ajax验证成功后返回用户名,动态创建script来加载“http://www.b.com/setCookie.jsp?user=ajax返回的用户名”这个url地址设置b站cookie,并设置一个回调函数给b站点调用【window作用域下的】,转向用的,而不是ajax验证完成后直接用转向,要不动态创建的script没加载完毕就被卸载了导致b站点cookie设置不成功

b站点setCookie.jsp设置cookie完后输出js脚本执行回调跳转,就是调用a站点注册的那个回调函数执行跳转
------解决方案--------------------
大概帮你写了个模型,java不会,动态页只能帮你描述功能了

在a站点登陆的时候就需要同时设置b站点的cookie
a站点登陆页面login.html用ajax请求check.jsp页面验证用户信息,验证成功后设置a站点的cookie
当a站点验证身份的ajax返回成功后,用script加载b站点的设置cookie的动态页,b站点设置cookie的页面执行完后输出js代码执行a站点的提供的回调函数进行转向

a站点,login.html主要js代码,登陆表单自己弄了
<script>
    //ajax验证用户身份的函数
    function check(un, pwd) {