记录Cookie有什么用?

  有时候我们需要通过web服务器的访问日志来统计UV(独立访客),并据此分析用户的行为。而UV是依据cookie数据得出的统计。UV相对于IP的好处是:IP是一个反映网络虚拟地址对象的概念,UV是一个反映实际使用者的概念,更加准确地对应一个实际的浏览者。使用UV作为统计量,可以更加准确的了解单位时间内实际上有多少个访问者来到了相应的页面。

如何记录Cookie?

Nginx:

在nginx的配置文件中,可以通过$http_cookie来访问Cookie.

想要记录Cookie,你需要修改nginx.conf配置文件。下面看一下具体的配置方法。

找到如下代码,

 #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';

如果你要记录整个Cookie,在下面添加一个新的log_format

 log_format  access_with_cookie  '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$http_cookie"';

然后在合适的位置上添加

access_log  /usr/share/nginx/logs/access_with_cookie.log  access_with_cookie;

如果你要记录Cookie的一部分,则你需要截取$http_cookie的内容。

现在假设我们在php中设置一个Cookie,

  <?php
setcookie('uuid' , '137C6BAE-DE1F-4F5F-51ED-5E1AA1B55A17' , time() + 3600*24);
?>

$http_cookie大概会是这样的

uuid=137C6BAE-DE1F-4F5F-51ED-5E1AA1B55A17

如果想仅仅记录  137C6BAE-DE1F-4F5F-51ED-5E1AA1B55A17。

则需要在nginx.conf的server段添加

  if ($http_cookie ~* ".*uuid=(.*)(?:;|$)")
{
set $cookie_uuid $1;
}

并修改logformat,用$cookie_uuid代替$http_cookie

上面的配置涉及到了nginx的正则表达式。我对于正则表达式也不是很了解,这里仅说一下我的理解,不保证正确。

$1代表正则表达式中第一个括号里边的内容。

好了,在nginx日志里记录Cookie大概就是上面这个样子。

Apache

nginx配置网络上的文章比较多,但Apache得相对少一些。把我的方法说明一下,原理是一样的,只是语法有些差别。

Apache已经预置了获取Cookie某个字段的方法:%{VARNAME}C,所以配置起来会相对简单一点。

编辑httpd.conf,找到下面的内容。

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

在它之上加1行,

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"  \"%{uuid}C\"" combined_with_cookie

%{VARNAME}C代表cookie中VARNAME的值。仅支持version 0 cookies。关于Apache的LogFormat可参考这里,有详细的说明。

修改

CustomLog "logs/access_log" common

CustomLog "logs/access_log" combined_with_cookie

另外整个Cookie的值可以使用%{Cookie}i获取。

以上仅是自己的经验总结,不保证其正确性,仅供参考。

Nginx和Apache配置日志格式记录Cookie的更多相关文章

  1. Nginx配置日志格式记录cookie

    Nginx配置日志格式记录cookie1. 一般用来做UV统计,或者获取用户token等. 配置方式:  在nginx的配置文件中有个变量:$http_cookie来获取cookie的信息.配置方式很 ...

  2. Linux centos7 VMware Apache访问日志不记录静态文件、访问日志切割、静态元素过期时间

    一.Apache访问日志不记录静态文件 网站大多元素为静态文件,如图片.css.js等,这些元素可以不用记录 vim /usr/local/apache2.4/conf/extra/httpd-vho ...

  3. 给Nginx配置日志格式和调整日期格式

    效果对比 官方默认日志格式 # 官方默认日志格式 log_format main '$server_name $remote_addr - $remote_user [$time_local] &qu ...

  4. nginx和apache配置目录浏览功能

    今天工作需要,要给客户提供一个patch的下载地址,于是想用nginx的目录浏览功能来做,需要让客户看到指定一个目录下的文件列表,然后让他自己来选择该下载那个文件: 我们都知道在apache下可以配置 ...

  5. Apache配置日志切割

    随着网站的访问越来越大,WebServer产生的日志文件也会越来越大,如果不对日志进行分割,那么只能一次将大的日志(如Apache的日志)整个删除,这样也丢失了很多对网站比较宝贵的信息,因为这些日志可 ...

  6. Nginx 日志中记录cookie

    在http节点下添加 log_format mai2 '$remote_addr - $remote_user [$time_local] "$request" ' '$statu ...

  7. Apache配置日志功能

    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent ...

  8. Nginx 用log_format设置日志格式

    1.配置文件#vim /usr/local/nginx/conf/nginx.conflog_format access ‘$remote_addr – $remote_user [$time_loc ...

  9. 修改Nginx与Apache配置参数解决http状态码:413上传文件大小限制问题

    一.修改Nginx上传文件大小限制 我们使用ngnix做web server的时候,nginx对上传文件的大小有限制,默认是1M. 当超过大小的时候会报413(too large)错误.这个时候我们要 ...

随机推荐

  1. 想学好web前端,需要看哪些书籍

    目前市场上HTML.CSS 类别书籍,都是大同小异,在当当网.卓越网搜索一下很多推荐.今天web前端大牛根据自己的经验总结如下:Javascript 的书籍推荐看老外写的,国内很多 Javascrip ...

  2. Android数据库 — — —查询数据

    package com.example.datebasetest; import android.content.ContentValues;import android.database.Curso ...

  3. 对象序列化到本地文件 ObjectOutputstream ObjcetInputstream

    package com.main.test; import java.io.FileInputStream; import java.io.FileNotFoundException; import ...

  4. AVAudioSession 音频会话

     http://blog.csdn.net/kingshuo7/article/details/42588191 这里面总结的不错https://segmentfault.com/a/11900000 ...

  5. entity framework 新手入门篇(1.5)-lambda表达式与linq

    在建立好了EF模型之后,先不着急使用它,在使用它之前,你还需要了解两个相关的技术,lambda表达式与linq. 作为微软C#语言中重要的语法糖-lambda表达式与LINQ,本质都是一个方法,以la ...

  6. Java 图片压缩

    package com.wuyu.util; import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.Buff ...

  7. iOS http post 上传图片

    上传图片的http post请求的格式是这样的 第一行是指定了http post请求的编码方式为multipart/form-data(上传文件必须用这个).boundary=AaB03x说明了AaB ...

  8. [转]Jenkins使用 管理节点

    现在我们已经搭建好了基本的Jenkins环境,在这一集里,我们说一说如何管理节点. 进入“系统管理”中的“管理节点”. 创建Windos系统的奴隶节点 先创建一台安装了Win7系统的虚拟机,作为Jen ...

  9. MAC下如何显示隐藏文件

    1.在终端上输入以下命令 defaults write com.apple.finder AppleShowAllFiles -bool true 2.重新启动Finder Command + Opt ...

  10. bootstrapCDN和本地化

    因为公司网络环境较差和自己是菜鸟的原因,很简单的事情折腾了不少时间.测试开发的网页时候 更新速度总是很慢,这跟使用bootstrapCDN有关系,因为每次更新,它都要重新访问cdn.bootstrap ...