P3P script src 解决cookie存取的跨域问题 java 终极解决办法

    最近在做一个项目,我的网站是www.a.com,但是需要取到www.b.com网站的cookie,折腾了很久,在同事的合作下。总算搞定了。
    我是用java做的, 首先在www.a.com/a.vm文件中加入这句话:

<script type="text/javascript" src="http://www.b.com/common

/cart/forpersate.do?act=getSidAndUserid"></script>

     src中的链接可以是b中的一个页面或者一个Action,都可以,我是用一个Action的。在b.com的这个action中,我的代码如下:
public ActionForward getSidAndUserid(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {
        String cartSid = this.getCartSid(request, response);
        UserSession userSession = this.getUserSession(request, response);
        CartServiceDelegate delegate = new CartServiceDelegate();
        int basketSize = delegate.getBasketSize(userSession, cartSid);
        StringBuffer buffer = new StringBuffer();
        buffer.append("iBacketItemsNumber=" + basketSize + ";");
        PrintWriter out;
        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/"");
        response.setHeader("Pragma", "No-cache");
        response.setHeader("Cache-Control", "no-cache");
        try {
            out = response.getWriter();
            out.print(buffer.toString());
        } catch (IOException e) {
            log.error("",e);
        }
        return null;
    }

这样就可以得到想要的结果。

在a.vm文件中,若查看源代码的话,会看到

<script type="text/javascript" src="http://www.b.com/common

/cart/forpersate.do?act=getSidAndUserid">iBacketItemsNumber=1;</script>

然后a.vm中要取到这个数据可以写如下代码:

<script type="text/javascript">document.write('&nbsp;'+iBacketItemsNumber+'&nbsp;');</script>

  这样就可以得到想要的数据了。

附:

我在Action中加入以下代码的原因是:
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/"");

因为在IE7中(IE6和Firfox都没有问题,只有IE7以上版本存在此问题),由于浏览器的隐私等级在IE7中默认为“中”,它会阻止保存可用来联系您的信息而没有您的明确同意的第三方Cookie。因此无法实现跨域取cookie的功能,除非用户手动把浏览器的隐私等级在IE7中默认为“低”。而以上的那行代码就可以解决这个问题,其中用到的是P3P技术。
   写此篇文章,希望能对大家有所帮助。。。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值