日志检测活动效果 如何将用户访问路径串起来(session id)
2017-03-18 00:47
471 查看
一个很实用的场景:某业务借助于其他平台投放了一些链接,用户点了此链接后,会跳转到自家产品的页面,比如评价页面,如果用户不通过外部链接进入页面,打开自家的产品,也可以进入到评价页面,不管用户从何而来,评价页面的url是不会变化的,如何纯粹衡量外部平台带来的流量究竟有多少?
此处就涉及到如何将用户的访问路径串起来的问题。如果要将访问路径串起来,需要考虑到几个问题:
1.用什么来串?
2.怎么串
针对第一个问题,目前有一种方法是用session id串起来,这就引出另外的问题:1.什么是session id?2.为什么用session id串起来就可以?
1.1什么是session
session技术则是服务端的解决方案,它是通过服务器来保持状态的。由于Session这个词汇包含的语义很多,因此需要在这里明确一下 Session的含义。首先,我们通常都会把Session翻译成会话,因此我们可以把客户端浏览器与服务器之间一系列交互的动作称为一个 Session。从这个语义出发,我们会提到Session持续的时间,会提到在Session过程中进行了什么操作等等;其次,Session指的是服务器端为客户端所开辟的存储空间,在其中保存的信息就是用于保持状态。从这个语义出发,我们则会提到往Session中存放什么内容,如何根据键值从 Session中获取匹配的内容等。要使用Session,第一步当然是创建Session了。那么Session在何时创建呢?当然还是在服务器端程序运行的过程中创建的,不同语言实现的应用程序有不同创建Session的方法,而在Java中是通过调用HttpServletRequest的getSession方法(使用true作为参数)创建的。在创建了Session的同时,服务器会为该Session生成唯一的Session id,而这个Session id在随后的请求中会被用来重新获得已经创建的Session;在Session被创建之后,就可以调用Session相关的方法往Session中增加内容了,而这些内容只会保存在服务器中,发到客户端的只有Session id;当客户端再次发送请求的时候,会将这个Session id带上,服务器接受到请求之后就会依据Session id找到相应的Session,从而再次使用之。正式这样一个过程,用户的状态也就得以保持了。
1.2session一般是具有一定有效期的,如pc端浏览器端一般是20分钟,30分钟,app一般是比较短,几十秒,切后台的时候也会生成新的session id,而由于用户的行为一般是具有前后关系的,比如用户一般是需要通过原始活动页跳转到活动点评页,然后到提交页,这一系列行为一般会发生在一个session id里面,因此,用session id可以评估活动的转化率。
具体可以参照一下的代码:
此处就涉及到如何将用户的访问路径串起来的问题。如果要将访问路径串起来,需要考虑到几个问题:
1.用什么来串?
2.怎么串
针对第一个问题,目前有一种方法是用session id串起来,这就引出另外的问题:1.什么是session id?2.为什么用session id串起来就可以?
1.1什么是session
session技术则是服务端的解决方案,它是通过服务器来保持状态的。由于Session这个词汇包含的语义很多,因此需要在这里明确一下 Session的含义。首先,我们通常都会把Session翻译成会话,因此我们可以把客户端浏览器与服务器之间一系列交互的动作称为一个 Session。从这个语义出发,我们会提到Session持续的时间,会提到在Session过程中进行了什么操作等等;其次,Session指的是服务器端为客户端所开辟的存储空间,在其中保存的信息就是用于保持状态。从这个语义出发,我们则会提到往Session中存放什么内容,如何根据键值从 Session中获取匹配的内容等。要使用Session,第一步当然是创建Session了。那么Session在何时创建呢?当然还是在服务器端程序运行的过程中创建的,不同语言实现的应用程序有不同创建Session的方法,而在Java中是通过调用HttpServletRequest的getSession方法(使用true作为参数)创建的。在创建了Session的同时,服务器会为该Session生成唯一的Session id,而这个Session id在随后的请求中会被用来重新获得已经创建的Session;在Session被创建之后,就可以调用Session相关的方法往Session中增加内容了,而这些内容只会保存在服务器中,发到客户端的只有Session id;当客户端再次发送请求的时候,会将这个Session id带上,服务器接受到请求之后就会依据Session id找到相应的Session,从而再次使用之。正式这样一个过程,用户的状态也就得以保持了。
1.2session一般是具有一定有效期的,如pc端浏览器端一般是20分钟,30分钟,app一般是比较短,几十秒,切后台的时候也会生成新的session id,而由于用户的行为一般是具有前后关系的,比如用户一般是需要通过原始活动页跳转到活动点评页,然后到提交页,这一系列行为一般会发生在一个session id里面,因此,用session id可以评估活动的转化率。
具体可以参照一下的代码:
select nvl(tt2.stat_date,tt1.stat_date) as stat_date ,case when nvl(nvl(tt2.source,tt1.source),'0')=1 then 'app' when nvl(nvl(tt2.source,tt1.source),'0')=3 then 'm' else nvl(nvl(tt2.source,tt1.source),'0') end as source ,case when tt2.url is null then tt1.url else tt2.url end as huodong_page ,nvl(huodong_pv,'0') as huodong_pv ,nvl(huodong_uv,'0') as huodong_uv ,nvl(sug_pv,'0') as sug_pv ,nvl(sug_uv,'0') as sug_uv ,nvl(dianping_pv,'0') as dianping_pv ,nvl(dianping_uv,'0') as dianping_uv ,nvl(succ_pv,'0') as succ_pv ,nvl(succ_uv,'0') as succ_uv from ( select stat_date ,t1.source as source ,case when url is NULL or url='' then '0' else url end as url ,sum(sug_pv) as sug_pv, count(distinct case when sug_pv >0 then uid end ) as sug_uv ,sum(dianping_pv) as dianping_pv, count(distinct case when dianping_pv>0 then uid end) as dianping_uv ,sum(succ_pv) as succ_pv , count(distinct case when succ_pv>0 then uid end) as succ_uv from ( select stat_date ,source---------区分不同的来源 如app,pc ,uid-----用于标识用户身份,是用户身份唯一id ,ssid----会话id 即session id ,sum(case when url regexp "/huodong/xiaoqu/search" then 1 else 0 end) as sug_pv ,sum(case when url regexp "/huodong/xiaoqu/detail" then 1 else 0 end) as dianping_pv ,sum(case when url regexp "huodong/xiaoqu/dp_succ" then 1 else 0 end) as succ_pv from tmp.tmp_xiaoqu_dianping_new_di where pt='20170314000000' and ( url regexp "/huodong/xiaoqu/search" --点评页前一个页面 or url regexp "/huodong/xiaoqu/detail" --点评页 or url regexp "huodong/xiaoqu/dp_succ" --点评成功页 ) group by stat_date, source, uid, ssid ) t1 left join ( select distinct source, ssid, url from tmp.tmp_xiaoqu_dianping_new_di where pt='20170314000000' and url regexp "subject/.*.h5#" ---活动来源页 ) t2 on t1.ssid = t2.ssid and t1.source=t2.source ---限制活动来源页的ssid和后续页面的ssid相等,屏蔽掉自动点评而非活动来源来的那一部分 group by stat_date,t1.source, case when url is NULL or url='' then '0' else url end )tt1 full outer join ( select stat_date ,source ,split(url, '\\?')[0] as url ,count(1) as huodong_pv ,count(distinct uid) as huodong_uv from tmp.tmp_xiaoqu_dianping_new_di where pt='20170314000000' and url regexp 'subject/.*.h5#' ----计算活动页本身的流量,用于计算转化率 group by stat_date,source, split(url, '\\?')[0] )tt2 on tt1.url = tt2.url and tt1.source=tt2.source and tt1.stat_date=tt2.stat_date;
相关文章推荐
- 利用nginx访问日志如何记录mysql中的用户id详解
- 如何检测用户第一次访问我的网站并显示友好信息
- 用户浏览器禁用了cookie,SessionID如何传递
- Session是通过利用设置在Cookie中的id来区分访问的用户
- 在.NET下如何用WebService实现身份认证,及如何跟踪用户的访问,如类似Possport的功能,不会还是用Session吧?
- 用户浏览器禁用了cookie,SessionID如何传递
- dnn 模块 获取服务器端路径、获取用户ID、需要登陆才能访问的页面的处理
- 如何分析用户的访问转换路径
- 悬而未决:不重新启动WINDOWS如何以其它用户身份访问已经以一用户账号打开的共享文件夹
- 如何给VSFTP增加用户,只能访问指定目录
- SQL SERVER – 检测LOCK、终止会话 ID/UOW 的用户进程
- asp.net中, 如何在后台获取访问这个页面的用户的名字?
- 如何防止他人使用旧id和旧口令访问Domino服务器?
- 如何启用WSS 3的匿名用户访问
- 如何恢复一个非用户sa创建的数据库,且使用原用户创建者进行访问
- 实现类似Google Earth的效果,做自己网站用户活动的3D效果原理
- JSP页面中如何使用相对路径访问文件
- asp.net中, 如何在后台获取访问这个页面的用户的名字?
- Xp系统IIS服务器经常出现:目前访问网站的用户过多--该如何解决