在piwik的访客记录中,会显示用户的ip地址。如下图:
customer_variables_1

但是,我们一般不仅仅要求得到IP地址,而且还需要得到用户的相关信息,比如ID号,名字或者区域等等。那么piwik是否可以扩展这样的功能呢?答案是肯定的。详细的官方文档http://piwik.org/docs/custom-variables/

如何实现呢?很简单,只需要在javascript中,获取用户变量,然后调用函数setCustomVariable( index, name, value, scope )即可。

在函数setCustomVariable( index, name, value, scope )中,name对应用户变量的名字,value对应值,scope对应范围,有两种取值“visit”和“page”。“visit”表示对一个访问者赋予用户变量,“page”表示对一次页面访问赋予用户变量。当选择“visit”时,只对当次的访问有效。如果同一个用户,又再次访问时,上次保存的用户变量就没有了,所以你得在每次访问时,都调用setCustomVariable函数。index表示索引值,表示这个键值对保存在了哪个位置。piwik对每条访问记录只支持存放5个用户变量。在表log_link_visit_action中,每一条记录对应一次访问,每条记录有5组字段(custom_var_k1,custom_var_v1……),存放着用户变量键值对。如果要保存的用户变量不止5组怎么办呢?很简单可以把变量合起来,作为一个变量。不过要注意,name和value的长度不能超过100个字符。

还有一个问题,如何在javascript中得到用户变量呢,一般用户变量都会保存在session中,比如用户名等等。那么javascript可以访问session吗?在我以前的印象中,javascript是客户端代码,而session是服务器端控制的,所以以前都没有直接用javascript访问,一般只是在页面中隐藏好要取的变量,然后用javascript的document.getElementByIdx_x_x_x_x_x()方法获取,或者用ajax获取。但这次,在网上搜索了一些,用javascript确实可以很方便的访问session。

第一种方法:var userName = “<%=session.getAttribute("USERNAME")%>“;
第二种方法:var userName = “${USERNAME}”;
在javascirpt方法中,设定好用户变量后,就可以在piwik的主页上看到相应的用户变量了。
customer_variables_2