有時候咱們須要經過web服務器的訪問日誌來統計UV(獨立訪客),並據此分析用戶的行爲。而UV是依據cookie數據得出的統計。UV相對於IP的好處是:IP是一個反映網絡虛擬地址對象的概念,UV是一個反映實際使用者的概念,更加準確地對應一個實際的瀏覽者。使用UV做爲統計量,能夠更加準確的瞭解單位時間內實際上有多少個訪問者來到了相應的頁面。php
在nginx的配置文件中,能夠經過$http_cookie來訪問Cookie.html
想要記錄Cookie,你須要修改nginx.conf配置文件。下面看一下具體的配置方法。nginx
找到以下代碼,web
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"';
而後在合適的位置上添加apache
access_log /usr/share/nginx/logs/access_with_cookie.log access_with_cookie;
若是你要記錄Cookie的一部分,則你須要截取$http_cookie的內容。服務器
如今假設咱們在php中設置一個Cookie,cookie
<?php setcookie('uuid' , '137C6BAE-DE1F-4F5F-51ED-5E1AA1B55A17' , time() + 3600*24); ?>
$http_cookie大概會是這樣的網絡
uuid=137C6BAE-DE1F-4F5F-51ED-5E1AA1B55A17ui
若是想僅僅記錄 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大概就是上面這個樣子。
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獲取。
以上僅是本身的經驗總結,不保證其正確性,僅供參考。