您的位置:首页 > 其它

日志检测活动效果 如何将用户访问路径串起来(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可以评估活动的转化率。

具体可以参照一下的代码:

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  url