利用javascript跨域访问cookie之广告推广

在上一篇《说一说javascript跨域和jsonp》中,利用JSONP进行了跨域的数据访问,利用JS本身的跨域能力在远端生成HTML结构的方式完成了一个小广告。

在实际应用中, 跨域使用天气预报组件可以使用上面的方式实现,另外一种常用的就是显示某些电商的广告,此广告中会滚动您访问过的产品或者关联想推介给你的产品。

比如在某个A网页中显示了两种广告:

某东的广告,里面显示的东西,都是访问过滴,并且加推了相关的东西

某宝的广告,基本一样呈现方式。

当访问某东某宝的商品时,会把信息放到cookie中,呈现时会根据cookie中的商品信息进行呈现。

问题来了。

A网页所在的站点和某东某宝的站点肯定是独立的两个域名,在A网页中访问某东某宝的cookie是拿不到滴,因为不同源,那么在A网页中的本身去呈现商品信息是做不到而且也不合适。

当然就要通过跨域的方式去呈现商品信息,需要解决的问题就是:

1.跨域服务生成的脚本中不能获取cookie,只能是在跨域的服务端获取cookie

为什么?,跨域服务生成的脚本最终是要在A网页上运行,在跨域服务生成的脚本中访问的cookie只能是A网页所在站点的cookie,那就不对了

2.跨域服务后台能够拿到cookie

答案是肯定的,浏览器只要向某个域名/地址发起请求,就会把其对应的cookie带过去。

那么,我们来实现个简单的demo

demo架构:node.js+express

1.在跨域服务上,可以理解成某电商,提供了一个页面,用来输入商品信息,模拟访问过的东西,输入后保存到cookie中。

页面

代码中就是把输入的东西加上一个过期时间保存进cookie中,当然先简单编个码。

<!DOCTYPE html>
<html>
    <head>
        <title>setCookie</title>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
        <link rel="stylesheet" href="/stylesheets/style.css">
    </head>
    <body>
        <h1>看过的商品</h1>
        <div>
            <span>商品1</span><input id="s1">
        </div>
        <p></p>
        <div>
            <span>商品2</span><input id="s2">
        </div>
        <p></p>
        <div>
            <span>商品3</span><input id="s3">
        </div>
        <p></p>
        <div>
            <span>商品4</span><input id="s4">
        </div>
        <p></p>
        <div>
            <input id="b" type="button" value="保存进cookie" onclick="saveInCookie();">
        </div>
        <script>
            function saveInCookie(){
                //所有商品信息
                var eleS1=document.getElementById(‘s1‘);
                var eleS2=document.getElementById(‘s2‘);
                var eleS3=document.getElementById(‘s3‘);
                var eleS4=document.getElementById(‘s4‘);

                //生成24小时后过期的参数
                var date=new Date();
                var expiresMSeconds=3*24*3600*1000;
                date.setTime(date.getTime()+expiresMSeconds);

                //商品信息全部设置到cookie中
                document.cookie=‘s1=‘+escape(eleS1.value)+";expires="+date.toGMTString();
                document.cookie=‘s2=‘+escape(eleS2.value)+";expires="+date.toGMTString();
                document.cookie=‘s3=‘+escape(eleS3.value)+";expires="+date.toGMTString();
                document.cookie=‘s4=‘+escape(eleS4.value)+";expires="+date.toGMTString();

                alert(document.cookie);
            }
        </script>
    </body>
</html>

2.在跨域服务上,写一段服务端生成脚本的代码,在生成脚本时,把浏览器带过来的cookie中的数据解码取出后拼到脚本中。

这里是通过request对象取出cookie,可能其他平台的方式不一样,但原理都是一样,浏览器是会带过来。

router.get(‘/ad‘, function (req, res) {
    //拼接一JS字符串,完成向html页面中输出html标记
    printCookies(req.cookies);
    var s = ‘document.write(\‘<div style="background-color:red;width:10rem;height:10rem">商品广告‘;
    //将cookie中所有的商品取出,拼到脚本字符串中
    for (var p in req.cookies) {
        s += ‘<div>‘ + unescape(req.cookies[p]) + ‘</div>‘;
    }
    s+=‘</div>\‘);‘;
    console.log(s);

    res.setHeader(‘content-type‘, ‘text/javascirpt;charset=utf-8‘);
    res.write(s);
    res.end();
});

function printCookies(cookies) {
    console.log(‘******cookies******‘);
    for (var p in cookies) {
        console.log(p + ‘=‘ + unescape(cookies[p]));
    }
    console.log(‘*******************‘);
}

3.在本地网站的A网页中对跨域服务进行脚本请求。

其中,通过script标签引用了跨域服务上提供脚本的地址。

<!DOCTYPE html>
<html>
    <head>
        <title>test</title>
        <link rel="stylesheet" href="/stylesheets/style.css"></head>
    <body>
        <script src="http://localhost:3001/ad"></script>
        <h1>航班信息</h1>
        <h4>航班号:MU532</h4>
        <h4>起飞:北京</h4>
        <h4>抵达:上海</h4>
    </body>
</html>

页面运行后,像下图一样,就能将访问过的商品信息列出,累似打了一个小广告。

如此,完成。

时间: 2024-08-04 20:33:01

利用javascript跨域访问cookie之广告推广的相关文章

Javascript跨域访问解决方案

Javascript跨域访问解决方案 分类: WEB TIPS 2009-02-13 14:08 15882人阅读 评论(5) 收藏 举报 javascriptiframeservletcallbackdomainfunction 由于安全方面的考虑,Javascript被限制了跨域访问的能力,但是有时候我们希望能够做一些合理的跨域访问的事情,那么怎么办呢?这里分两类情况:一.基于同一父域的子域之间页面的访问:参见如下3个domain域:taobao.com.jipiao.taobao.com.

Javascript 跨域访问解决方案 总结

在客户端编程语言中,如javascript和ActionScript,同源策略是一个很重要的安全理念,它在保证数据的安全性方面有着重要的意义.同 源策略规定跨域之间的脚本是隔离的,一个域的脚本不能访问和操作另外一个域的绝大部分属性和方法.那么什么叫相同域,什么叫不同的域呢? 同源策略 在客户端编程语言中,如javascript和 ActionScript,同源策略是一个很重要的安全理念,它在保证数据的安全性方面有着重要的意义.同源策略规定跨域之间的脚本是隔离的,一个域的脚本不能访问和操作另外一个

使用JSONP彻底解决Ajax跨域访问Cookie Session的方案

最近做开发时要把图片文件放到另外一台服务器上(另外一个域名),因为这样分布式存放,网站打开速度会快很多.而我采用AJAX获取图片服务器上某用户的图片时遇到了问题,按照通常的方式无法获取信息,得到的Cookie都是null,后来想到浏览器出于安全考虑JavaScript和iframe不能跨域访问,那我们就要考虑使用其他途径来完成了,捣鼓了2天终于找到了解决方案,我使用JSONP来解决,请看. JS代码: $.ajax({ type: "get", url: "http://ww

javascript跨域访问探索之旅

需求: 最近工作负责一个互联网应用A(我公司应用)与另一个互联网应用B进行通讯,通讯的方式是这样的:另一个互联网应用某些表单信息需要从我公司的互联网应用获取:首先用户访问互联网应用B,接着在表单编辑页面点击按钮创建新窗口显示互联网应用A内容,用户在应用A窗口选取好内容后点击按钮,应用A的窗口关闭,应用A选取好的内容填充到应用B特定的表单元素上. 这个问题最简化描述就是,浏览器有两个不同网站(域)的页面,页面B需要获取页面A的信息. 问题解决过程: 刚开始我也不知道这个是跨域问题,虽然同事一开始就

JavaScript跨域访问CORS问题

在尝试从一个web前端使用HTTP Request请求访问REST服务端时,遇到错误: XMLHttpRequest cannot load http://localhost:8080/ping. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:63342' is therefore not allowed access. 这个错误是因为A

javascript 跨域访问

XMLHttpRequest cannot loadhttp://www.zjblogs.com/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. 查了一翻资料,发现原来是新W3C标准中是这样规定的: 最新的W3C标准里是这么实现HTTP跨域请求的, Cross-Origin Resource

jquery下利用jsonp跨域访问实现方法

$.ajax({ async:false, url: '', // 跨域URL type: 'GET', dataType: 'jsonp', jsonp: 'jsoncallback', //默认callback data: mydata, //请求数据 timeout: 5000, beforeSend: function(){ //jsonp 方式此方法不被触发.原因可能是dataType如果指定为jsonp的话,就已经不是ajax事件了 }, success: function (jso

利用jquery跨域访问一般处理程序

$.getJSON('http://www.taik.com?Action=getservice&r=' + Math.random() + '&jsoncallback=?', function (data) { //回调函数,处理返回的数据 jsoncallback=? 必须有 }); bool success = true; string result = ""; string msg = ""; result = BindServiceInf

jQuery 跨域访问问题解决方法

浏览器端跨域访问一直是个问题, 多数研发人员对待js的态度都是好了伤疤忘了疼,所以病发的时候,时不时地都要疼上一疼.记得很久以前使用iframe 加script domain 声明,yahoo js util 的方式解决二级域名跨域访问的问题. 时间过得好快,又被拉回js战场时, 跨域问题这个伤疤又开疼了. 好在,有jquery帮忙,跨域问题似乎没那么难缠了.这次也借此机会对跨域问题来给刨根问底,结合实际的开发项目,查阅了相关资料,算是解决了跨域问题..有必要记下来备忘. 跨域的安全限制都是指浏