我们正在尝试使用 server.xml 中的 '%S' 在访问日志中打印 session ID。该应用程序使用 Angular js 开发。

但是它会打印 "-" 而不是 session ID。

server.xml

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
               prefix="localhost_access_log" suffix=".txt" 
               pattern="sessionId=%S host=%h %l %u %t &quot;%r&quot; %s %b" /> 

访问日志:

sessionId=- host=127.0.0.1 - - [12/May/2017:13:44:32 +0100] "GET /application/img/sort-icn-down.png HTTP/1.1" 200 1114 

angular js 应用程序是否自动创建 session ID?

请您参考如下方法:

Session ID 仅在您的服务器端应用程序创建 session ID 时才会显示,这取决于您使用的框架...例如,如果请求中没有 Session ID,Spring MVC 总是会创建一个新的 Session ID .

让我展示一个我用 Spring MVC 项目和 Tomcat 做的简单测试:

考虑我的 server.xml 中的以下片段

<Valve className="org.apache.catalina.valves.AccessLogValve" 
directory="logs" prefix="localhost_access_log." suffix=".txt" 
pattern="%h %l %u %t &quot;%r&quot; %s %b session-id %S" /> 

考虑到我在第一次访问打开图像时没有任何 cookie:

127.0.0.1 - - [26/Jun/2017:18:40:53 -0300] "GET /webapp/images/login.png HTTP/1.1" 200 29646 session-id - 

因为它是一个没有被 Spring 处理的图像,所以我的服务器不会创建 session ID...再次访问也无济于事

127.0.0.1 - - [26/Jun/2017:18:42:52 -0300] "GET /webapp/images/login.png HTTP/1.1" 304 - session-id - 

但是如果我访问一个由 Spring MVC 处理的方法,它将创建一个新 session (而且我无法完全控制 session 的创建)

127.0.0.1 - - [26/Jun/2017:18:45:16 -0300] "GET /webapp/pages/users.json HTTP/1.1" 200 110 session-id 068FCCF5BC04EDEEC830E3E8CDF2CCDB 

现在,访问与之前相同的图像,客户端将在请求中发送 session ID,Tomcat 将能够记录它

127.0.0.1 - - [26/Jun/2017:18:48:09 -0300] "GET /webapp/images/login.png HTTP/1.1" 200 29646 session-id 068FCCF5BC04EDEEC830E3E8CDF2CCDB 

因此不会为图像、脚本或其他静态资源创建 session ID。但这实际上取决于您的实现或您使用的框架...... 正如你所知,JSESSIONID 在 Servlet 3.0 specification 中(第 7.1.1 章 cookie,第 55 页)。


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!