为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
Html5 JavaScript

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

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

存储访问来源:通过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 class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="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>
点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消