点击页面产生的信息经过nginx保存到本地文件

页面js代码

这段js代码是在进入页面的时候就开始执行,模拟用户进入页面产生的信息,它的入口是autoLoad方法

(function() {var CookieUtil = {// get the cookie of the key is nameget : function(name) {var cookieName = encodeURIComponent(name) + "=", cookieStart = document.cookie.indexOf(cookieName), cookieValue = null;if (cookieStart > -1) {var cookieEnd = document.cookie.indexOf(";", cookieStart);if (cookieEnd == -1) {cookieEnd = document.cookie.length;}cookieValue = decodeURIComponent(document.cookie.substring(cookieStart + cookieName.length, cookieEnd));}return cookieValue;},// set the name/value pair to browser cookieset : function(name, value, expires, path, domain, secure) {var cookieText = encodeURIComponent(name) + "="+ encodeURIComponent(value);if (expires) {// set the expires timevar expiresTime = new Date();expiresTime.setTime(expires);cookieText += ";expires=" + expiresTime.toGMTString();}if (path) {cookieText += ";path=" + path;}if (domain) {cookieText += ";domain=" + domain;}if (secure) {cookieText += ";secure";}document.cookie = cookieText;},setExt : function(name, value) {this.set(name, value, new Date().getTime() + 315360000000, "/");}};// 主体,其实就是tracker jsvar tracker = {// configclientConfig : {serverUrl : "http://BigDB/log.gif",sessionTimeout : 360, // 360s -> 6minmaxWaitTime : 3600, // 3600s -> 60min -> 1hver : "1"},cookieExpiresTime : 315360000000, // cookie过期时间,10年columns : {// 发送到服务器的列名称eventName : "en",version : "ver",platform : "pl",sdk : "sdk",uuid : "u_ud",memberId : "u_mid",sessionId : "u_sd",clientTime : "c_time",language : "l",userAgent : "b_iev",resolution : "b_rst",currentUrl : "p_url",referrerUrl : "p_ref",title : "tt",orderId : "oid",orderName : "on",currencyAmount : "cua",currencyType : "cut",paymentType : "pt",category : "ca",action : "ac",kv : "kv_",duration : "du"},keys : {pageView : "e_pv",chargeRequestEvent : "e_crt",launch : "e_l",eventDurationEvent : "e_e",sid : "bftrack_sid",uuid : "bftrack_uuid",mid : "bftrack_mid",preVisitTime : "bftrack_previsit",},/*** 获取会话id*/getSid : function() {return CookieUtil.get(this.keys.sid);},/*** 保存会话id到cookie*/setSid : function(sid) {if (sid) {CookieUtil.setExt(this.keys.sid, sid);}},/*** 获取uuid,从cookie中*/getUuid : function() {return CookieUtil.get(this.keys.uuid);},/*** 保存uuid到cookie*/setUuid : function(uuid) {if (uuid) {CookieUtil.setExt(this.keys.uuid, uuid);}},/*** 获取memberID*/getMemberId : function() {return CookieUtil.get(this.keys.mid);},/*** 设置mid*/setMemberId : function(mid) {if (mid) {CookieUtil.setExt(this.keys.mid, mid);}},startSession : function() {// 加载js就触发的方法if (this.getSid()) {// 会话id存在,表示uuid也存在if (this.isSessionTimeout()) {// 会话过期,产生新的会话this.createNewSession();} else {// 会话没有过期,更新最近访问时间this.updatePreVisitTime(new Date().getTime());}} else {// 会话id不存在,表示uuid也不存在this.createNewSession();}this.onPageView();},onLaunch : function() {// 触发launch事件var launch = {};launch[this.columns.eventName] = this.keys.launch; // 设置事件名称this.setCommonColumns(launch); // 设置公用columnsthis.sendDataToServer(this.parseParam(launch)); // 最终发送编码后的数据},onPageView : function() {// 触发page view事件if (this.preCallApi()) {var time = new Date().getTime();var pageviewEvent = {};pageviewEvent[this.columns.eventName] = this.keys.pageView;pageviewEvent[this.columns.currentUrl] = window.location.href; // 设置当前urlpageviewEvent[this.columns.referrerUrl] = document.referrer; // 设置前一个页面的urlpageviewEvent[this.columns.title] = document.title; // 设置titlethis.setCommonColumns(pageviewEvent); // 设置公用columnsthis.sendDataToServer(this.parseParam(pageviewEvent)); // 最终发送编码后的数据this.updatePreVisitTime(time);}},onChargeRequest : function(orderId, name, currencyAmount, currencyType, paymentType) {// 触发订单产生事件if (this.preCallApi()) {if (!orderId || !currencyType || !paymentType) {this.log("订单id、货币类型以及支付方式不能为空");return;}if (typeof (currencyAmount) == "number") {// 金额必须是数字var time = new Date().getTime();var chargeRequestEvent = {};chargeRequestEvent[this.columns.eventName] = this.keys.chargeRequestEvent;chargeRequestEvent[this.columns.orderId] = orderId;chargeRequestEvent[this.columns.orderName] = name;chargeRequestEvent[this.columns.currencyAmount] = currencyAmount;chargeRequestEvent[this.columns.currencyType] = currencyType;chargeRequestEvent[this.columns.paymentType] = paymentType;this.setCommonColumns(chargeRequestEvent); // 设置公用columnsthis.sendDataToServer(this.parseParam(chargeRequestEvent)); // 最终发送编码后的数据this.updatePreVisitTime(time);} else {this.log("订单金额必须是数字");return;}}},onEventDuration : function(category, action, map, duration) {// 触发event事件if (this.preCallApi()) {if (category && action) {var time = new Date().getTime();var event = {};event[this.columns.eventName] = this.keys.eventDurationEvent;event[this.columns.category] = category;event[this.columns.action] = action;if (map) {for ( var k in map) {if (k && map[k]) {event[this.columns.kv + k] = map[k];}}}if (duration) {event[this.columns.duration] = duration;}this.setCommonColumns(event); // 设置公用columnsthis.sendDataToServer(this.parseParam(event)); // 最终发送编码后的数据this.updatePreVisitTime(time);} else {this.log("category和action不能为空");}}},/*** 执行对外方法前必须执行的方法*/preCallApi : function() {if (this.isSessionTimeout()) {// 如果为true,表示需要新建this.startSession();} else {this.updatePreVisitTime(new Date().getTime());}return true;},sendDataToServer : function(data) {alert(data);// 发送数据data到服务器,其中data是一个字符串var that = this;var i2 = new Image(1, 1);// <img src="url"></img>i2.onerror = function() {// 这里可以进行重试操作};i2.src = this.clientConfig.serverUrl + "?" + data;},/*** 往data中添加发送到日志收集服务器的公用部分*/setCommonColumns : function(data) {data[this.columns.version] = this.clientConfig.ver;data[this.columns.platform] = "website";data[this.columns.sdk] = "js";data[this.columns.uuid] = this.getUuid(); // 设置用户iddata[this.columns.memberId] = this.getMemberId(); // 设置会员iddata[this.columns.sessionId] = this.getSid(); // 设置siddata[this.columns.clientTime] = new Date().getTime(); // 设置客户端时间data[this.columns.language] = window.navigator.language; // 设置浏览器语言data[this.columns.userAgent] = window.navigator.userAgent; // 设置浏览器类型data[this.columns.resolution] = screen.width + "*" + screen.height; // 设置浏览器分辨率},/*** 创建新的会员,并判断是否是第一次访问页面,如果是,进行launch事件的发送。*/createNewSession : function() {var time = new Date().getTime(); // 获取当前操作时间// 1. 进行会话更新操作var sid = this.generateId(); // 产生一个session idthis.setSid(sid);this.updatePreVisitTime(time); // 更新最近访问时间// 2. 进行uuid查看操作if (!this.getUuid()) {// uuid不存在,先创建uuid,然后保存到cookie,最后触发launch事件var uuid = this.generateId(); // 产品uuidthis.setUuid(uuid);this.onLaunch();}},/*** 参数编码返回字符串*/parseParam : function(data) {var params = "";for ( var e in data) {if (e && data[e]) {params += encodeURIComponent(e) + "="+ encodeURIComponent(data[e]) + "&";}}if (params) {return params.substring(0, params.length - 1);} else {return params;}},/*** 产生uuid*/generateId : function() {var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';var tmpid = [];var r;tmpid[8] = tmpid[13] = tmpid[18] = tmpid[23] = '-';tmpid[14] = '4';for (i = 0; i < 36; i++) {if (!tmpid[i]) {r = 0 | Math.random() * 16;tmpid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];}}return tmpid.join('');},/*** 判断这个会话是否过期,查看当前时间和最近访问时间间隔时间是否小于this.clientConfig.sessionTimeout<br/>* 如果是小于,返回false;否则返回true。*/isSessionTimeout : function() {var time = new Date().getTime();var preTime = CookieUtil.get(this.keys.preVisitTime);if (preTime) {// 最近访问时间存在,那么进行区间判断return time - preTime > this.clientConfig.sessionTimeout * 1000;}return true;},/*** 更新最近访问时间*/updatePreVisitTime : function(time) {CookieUtil.setExt(this.keys.preVisitTime, time);},/*** 打印日志*/log : function(msg) {console.log(msg);},};// 对外暴露的方法名称window.__AE__ = {startSession : function() {tracker.startSession();},onPageView : function() {tracker.onPageView();},onChargeRequest : function(orderId, name, currencyAmount, currencyType, paymentType) {tracker.onChargeRequest(orderId, name, currencyAmount, currencyType, paymentType);},onEventDuration : function(category, action, map, duration) {tracker.onEventDuration(category, action, map, duration);},setMemberId : function(mid) {tracker.setMemberId(mid);}};// 自动加载方法var autoLoad = function() {// 进行参数设置var _aelog_ = _aelog_ || window._aelog_ || [];var memberId = null;for (i = 0; i < _aelog_.length; i++) {_aelog_[i][0] === "memberId" && (memberId = _aelog_[i][1]);}// 根据是给定memberid,设置memberid的值memberId && __AE__.setMemberId(memberId);// 启动session__AE__.startSession();};autoLoad();
})();

测试页面

页面内容不重要,重点是要引入js文件

<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>测试页面1</title>
<script type="text/javascript" src="./js/analytics.js"></script>
</head>
<body>测试页面1<br/>跳转到:<a href="demo.jsp">demo</a><a href="demo2.jsp">demo2</a><a href="demo3.jsp">demo3</a><a href="demo4.jsp">demo4</a>
</body>
</html>

进入该页面会模拟产生一些信息数据,大概内容

en=e_pv&
p_url=http%3A%2F%2Flocalhost%3A8080%2Fdemo.jsp&
tt=%E6%B5%8B%E8%AF%95%E9%A1%B5%E9%9D%A21&
ver=1&
pl=website&
sdk=js&
u_ud=0EED463D-8CAD-46D3-B336-CB9054BE7177&
u_mid=zhangsan&
u_sd=EBBB76AD-9ECD-450A-86C8-DD6EAFB14BF5&
c_time=1568376613884&l=zh-CN&
b_iev=Mozilla%2F5.0%20(Windows%20NT%2010.0%3B%20Win64%3B%20x64)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F76.0.3809.132%20Safari%2F537.36&
b_rst=1280*720

然后由nginx接收,js中指定发送的地址得是该nginx所在的虚拟机

nginx配置文件修改两个地方

log_format my_log '$remote_addr^A$msec^A$http_host^A$request_uri';
location =/log.gif {default_type image/gif;access_log /opt/data/access.log my_log;}

启动nginx,到目录/opt/data下,监控文件tail -f access.log,刷新前面的页面就能看到相应的数据增多

此时access.log就是记录页面信息的日志文件

js 获取sessionid_百战卓越班学员学习经验分享:页面js代码相关推荐

  1. hadoop商品推荐_百战卓越班学员学习经验分享:商品推荐

    商品推荐 入口方法 package cn.sxt.itemcf; import org.apache.hadoop.conf.Configuration; import java.util.HashM ...

  2. hadoop商品推荐_北京尚学堂学员学习经验分享:商品推荐

    商品推荐 入口方法 package cn.sxt.itemcf; import org.apache.hadoop.conf.Configuration; import java.util.HashM ...

  3. 「代码家」的学习过程和学习经验分享【转】

    图灵丛书的一句话说的很好,Standing on the shoulders of giants,是的,我们一直站在巨人的肩上,我们起步都在沿着他们的轨迹前行,之后慢慢的在前人的开发基础或者规范上写出 ...

  4. 英语学习经验分享(四六级、竞赛、口语)

    英语学习经验分享(四六级.竞赛.口语) 什么时候开始下决心好好学英语的,自己又经历了哪些苦逼事儿??? Listening Speaking 英语竞赛有哪些需要参加??? 全国大学生英语竞赛 河南省翻 ...

  5. 学习经验分享 | 目录一览表

    文章目录 学习经验分享 | 目录一览表

  6. Unity3D 之 学习路线与学习经验分享

    转自:https://blog.csdn.net/qq_22521529/article/details/83108837 Unity3D学习路线与学习经验分享 该博文出自作者15游02 丁祺,是一篇 ...

  7. Day663.大佬学习经验分享 -Java业务开发常见错误

    大佬学习经验分享 Hi,我是阿昌,今天学习记录分析的是关于某大佬的学习经验分享. 大佬工作这些年来,经常会有同学来找大佬沟通学习和成长,他们的问题整体可以归结为两个. 一是,长期参与 CRUD 业务开 ...

  8. LaTeX学习经验分享

    LaTeX学习经验分享 LaTeX介绍 LaTeX编辑器介绍 LaTeX小技巧 公式编辑环境下斜体符号变直体 结语 LaTeX介绍 Latex 是一种高质量的文字排版工具,主要用于技术类和科技类论文文 ...

  9. WCF分布式开发步步为赢(0):WCF学习经验分享,如何更好地学习WCF?

    WCF分布式开发学习,应该从哪里开始? 微软WCF Web服务 Web API学习群 339444457 微软ASP.NET MVC 4 Web编程群     44206115 学习WCF是不是就不需 ...

最新文章

  1. firefox更新后标签没了_时隔三月,奶酪增强版 Chrome Edge 双双更新
  2. qt 嵌入web页面_Qt嵌入浏览器(三)——QWebEngine与Https
  3. Python基础(6)--条件、循环
  4. CV Code | 计算机视觉开源周报 20190603期
  5. Spring ROO初体验
  6. cs1.6联机服务器没有响应,cs1.6联机问题解说
  7. boost电路输出电流公式_Boost电路的参数计算及仿真
  8. 倩女手游怎么查看服务器信息,倩女幽魂手游新增互通服务器 互通服务器信息介绍[图]...
  9. GPS授时是什么意思
  10. PhotoZoom Classic 7怎么样?对电脑和系统要求高不高?
  11. 全平台小程序开发框架Uni-app重点概览
  12. 【C语言】函数基础知识点总结
  13. Docker微容器之Alpine Linux 初体验
  14. 疑似说教 | 学会提问
  15. 共模电感模型matlab,混成式共模电感的原理及功能讲解?
  16. 《机器学习实战》-04 朴素贝叶斯
  17. C语言:L1-061 新胖子公式 (10 分)
  18. 谷歌或在第四季度推99美元Nexus平板电脑
  19. 团体天梯 L3-022 地铁一日游 (30 分)(测试点分析 and 推荐测试样例)
  20. [magick/magick_libMagickCore_la-animate.lo] Error 解决方案

热门文章

  1. Programming Entity Framework-dbContext 学习笔记第五章
  2. oracle 11g数据库以管理员身份登录不上
  3. [原]iOS中 Web 页面与 Native Code 的一种通信方式
  4. 解决Eclipse狂吃内存的解决方法(转)
  5. eclipse svn异常:RA layer request failed 的解决方案
  6. 原生js的attachEvent和addEventListener解决window.onload在一个页面只能执行一次的问题
  7. Apache服务器 配置多个网站解决方案
  8. 关于MySQL连接Navicat Premium 12失败的解决方法
  9. Visual Stdio VS 错误 error : 0xC00000FD: Stack overflow. 更改堆栈空间解决栈溢出问题
  10. 从JavaScript数组中获取随机项[重复]