2011-05-30 55 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);