2011-05-30 102 views
5

我必須爲我的web應用程序創建訪問日誌。我們在jboss.i前使用appache http服務器,我使用的是Apache訪問日誌指令,但問題在於:在訪問日誌中沒有獲取sessionid的指令。我需要訪問日誌中的sessionid才能獲得統計信息report.pls任何有解決方案的人都可以幫助我。如何將jsession id添加到apache http訪問日誌中

回答

1

包含%{JSESSIONID}℃到LogFormat指令

+0

我試過了,但沒有返回任何東西。 – 2011-05-30 10:31:12

+0

我嘗試了以下指令語法,但它沒有添加sessionid來登錄 LogFormat「%t%h \」%r \「%> s%b \」%{Referer} i \「\」%{User-agent 「i \」%{JSESSIONID} C「合併 CustomLog logs/kv_acces_log combined – 2011-05-30 10:44:51

+0

需要重新啓動httpd,然後在客戶端瀏覽器中刷新,因此jsessionid將出現在accesslog中。 – Jasonw 2011-05-30 12:13:16

9

如果你的Web應用程序始終使用cookies來管理會話,你將被罰款改變你的LogFormat並添加參數記錄特定的cookie:

LogFormat ... \"%{JSESSIONID}C\" ... combined 

這不適用於第一次請求,因爲通常沒有將cookie發送到服務器。 參見: http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats

%{Foobar的}℃

餅乾Foobar的內容發送到服務器的請求。只有版本0 cookie完全受支持。

如果您需要登錄每個JSESSIONID,所以evene這些編碼爲URL字符串,你可以這樣你的Web應用程序服務器(如Tomcat)上設置的標題:

response.setHeader("X-JSESSIONID", request.getSession().getId()); 

在Apache日誌格式可以登錄這個RepsonseHeader與

%{Foobar的}Ø

Foobar的內容:回覆中的標題行。

所以導致這樣的事情:

LogFormat ... \"%{X-JSESSIONID}o\" ... combined 

但留意安全:你不應該登錄JSESSIONID因爲大家誰有權訪問日誌文件可以劫持每個用戶會話。當你在你的tomcat中設置標題行時,你可能應該加密sessionid。

String sessionId = request.getSession().getId(); 
String crypt = yourcryptalgo(sessionId); 
response.setHeader("X-JSESSIONID", crypt);