记录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. 实验二 简易版C语言文法

    <程序>::=begin<语句串>end <语句串>::=<语句>{;<语句>} <语句>::=<赋值语句> < ...

  2. QM UML状态机建模实例之移植 cortex-m0

    ---恢复内容开始--- 在上一期“Blinky for cortex-m0”中我们介绍了如何在QM中建立一个工程和生成代码,如何使生成的代码在我们的工程师运行起来,为此这一期要介绍如何将QP-NAN ...

  3. 微信公众账号 Senparc.Weixin.MP SDK 开发教程 索引

    Senparc.Weixin.MP SDK从一开始就坚持开源的状态,这个过程中得到了许多朋友的认可和支持. 目前SDK已经达到比较稳定的版本,这个过程中我觉得有必要整理一些思路和经验,和大家一起分享. ...

  4. WPF项目中所遇到的一些问题集

    1. 没有Timer控件 解决方案: 第一步:申明一个DispatcherTimer 类的变量, private DispatcherTimer timer; //定时控件 第二步:初始化这个类 ti ...

  5. HDU 4059 容斥初步练习

    #include <iostream> #include <cstring> #include <cstdio> #include <algorithm> ...

  6. SVN的部署及分支等方法

    1.本地Repository的创建 repository的创建很简单,假设我要在D:\TortoiseSVN\TestRepository目录中创建repository,只需 右键TestReposi ...

  7. Asp.net Web.Config - 配置元素 caching

    Asp.net Web.Config - 配置元素 caching 记得之前在写缓存DEMO的时候,好像配置过这个元素,好像这个元素还有点常用. 一.caching元素列表   元素 说明 cache ...

  8. Win10/UWP开发—SystemNavigationManager

    Win10系统为确保所有应用中的一致导航体验,提供后退导航功能.当你的应用在手机.平板电脑上或者在支持系统后退功能的电脑或笔记本电脑上运行时,系统会在"后退"按钮被按下时通知你的应 ...

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

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

  10. Linux使用mount挂载samba共享

    # 挂载smb使用读写777权限sudo mount -t cifs -o "rw,dir_mode=0777,file_mode=0777,username=winuser,passwor ...