如何将会话ID添加到apache http访问日志中

时间:2011-05-30 06:56:23

标签: apache2

我必须为我的Web应用程序创建访问日志。我们正在jboss.i前面使用appache http服务器使用apache访问日志指令,但问题是没有指令在访问日志中获取sessionid。我需要在访问日志中使用sessionid进行统计报告.pls任何有解决方案的人都会帮助我。

2 个答案:

答案 0 :(得分:11)

如果您的Web应用程序始终使用Cookie来管理会话,则可以更改LogFormat并添加用于记录特定cookie的参数:

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

这对第一个请求不起作用,因为通常不会向服务器发送cookie。 看到: http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats

  

<强>%{Foobar的}℃

     

发送到服务器的请求中的Cookie Foobar的内容。仅完全支持版本0 cookie。

如果你需要记录每个jsessionid,那么将编码到url字符串中的那些evene,你可以在你的web应用服务器(如tomcat)上设置一个Header,如下所示:

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);

答案 1 :(得分:1)

将%{JSESSIONID} C包含到LogFormat指令