继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

利用本地存储实现注册来源统计

未期而遇
关注TA
已关注
手记 5
粉丝 4
获赞 17

工作中遇到的需求是这样的
尽可能获取网站注册用户来源,如来自百度搜索,或者其他外链。

实现方式有很多,我们公司采用的是服务器端技术来实现的,我根据这个需求用前端技术实现了下。具体思路如下图所示
图片描述

存储访问来源:通过referrer获取访问来源url,通过sessionStorage.setItem存储。
获取访问来源:通过sessionStorage.getItem获取。
具体实现细节看代码示例注释
代码示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>获取网站注册用户来源</title>
</head>
<body>
    <h4>需求分析</h4>
    <p>1. 利用document的referer可以获取上一个页面,难点是页面的上一个页面可能是从本站的其他页面。</p>
    <p>2. indexOf上一个页面的url如果不包含域名,则将这个url的域名存储在浏览器中。此处采用sessionStorage,存储的数据会在回话结束时删除</p>
    <p>3. 注册成功时获取这个值并保存在数据库中。</p>
    <p>缺点是referer本身的缺点,以及兼容性问题</p>
    <button>假如点击此按钮注册成功</button>
    <script src="http://cdn.staticfile.org/jquery/1.11.2/jquery.min.js"></script>
    <script type="text/javascript">
        $(function(){
            var source = document.referrer;
            var hostname = window.location.hostname;
            var flag = window.sessionStorage;
            var sourceHost = parseURL(source); // 上一个页面的域名

            // 存在上一个页面,并且不是本域的,设置本地存储
            if (source && hostname != sourceHost) {
                setSessionStorage("source",sourceHost)
            }

            $("button").click(function(){
                alert(getSessionStorage("source"))
            })

            // 设置本地存储的方法
            function setSessionStorage(key,value){
                if (!flag) {return}
                sessionStorage.setItem(key,value)
            }
            // 获取本地存储的方法
            function getSessionStorage(key){
                if (!flag) {return}
                return sessionStorage.getItem(key)  "unknown"
            }
            // 获取url的域名的方法
            function parseURL(url) {  
                 var a =  document.createElement('a');  
                 a.href = url;  
                 return a.hostname;
            }  
        })

    </script>
</body>
</html>
打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP