記錄Cookie有什么用?
有時候我們需要通過web服務器的訪問日志來統計UV(獨立訪客),並據此分析用戶的行為。而UV是依據cookie數據得出的統計。UV相對於IP的好處是:IP是一個反映網絡虛擬地址對象的概念,UV是一個反映實際使用者的概念,更加准確地對應一個實際的瀏覽者。使用UV作為統計量,可以更加准確的了解單位時間內實際上有多少個訪問者來到了相應的頁面。
如何記錄Cookie?
Nginx:
在nginx的配置文件中,可以通過$http_cookie來訪問Cookie.
想要記錄Cookie,你需要修改nginx.conf配置文件。下面看一下具體的配置方法。
找到如下代碼,
1 #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 2 # '$status $body_bytes_sent "$http_referer" ' 3 # '"$http_user_agent" "$http_x_forwarded_for"';
如果你要記錄整個Cookie,在下面添加一個新的log_format
1 log_format access_with_cookie '$remote_addr - $remote_user [$time_local] "$request" ' 2 '$status $body_bytes_sent "$http_referer" ' 3 '"$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段添加
1 if ($http_cookie ~* ".*uuid=(.*)(?:;|$)") 2 { 3 set $cookie_uuid $1; 4 }
並修改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獲取。
以上僅是自己的經驗總結,不保證其正確性,僅供參考。