最近在做一个项目,我的网站是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(' '+iBacketItemsNumber+' ');</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技术。
写此篇文章,希望能对大家有所帮助。。。
P3P script src 解决cookie存取的跨域问题 java 终极解决办法
最新推荐文章于 2024-04-03 14:30:00 发布