2017-05-12 48 views
8

我們要打印的會話ID在server.xml使用'%S'訪問日誌。該應用程序是使用角度js開發的。獲取Tomcat的訪問日誌會話ID爲角JS應用

但是它打印「 - 」,而不是會話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 

是否角JS應用程序會自動創建會話ID?

+0

我們幫不了你,除非你指定服務器如何處理會話。 – 31piy

回答

2

會話ID將只顯示,例如,總是創建一個新的會話ID,如果沒有會話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" /> 

考慮,我沒有任何餅乾我第一次訪問打開圖像:

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

因爲它是不是由Spring處理的圖像,我的服務器不會創建一個會話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的處理方法就會創建一個新的會話(和我沒有在會話的建立完全控制)

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

現在,訪問相同的圖像從之前的客戶端將請求發送會話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 

所以沒有會話ID將被用於圖片,腳本或其他靜態資源創建的。但它真的取決於您的實現或正在使用的框架... 而只是讓你知道,JSESSIONID在Servlet 3.0 specification(CH 7.1.1餅乾,第55頁)。

+0

我瞭解Spring MVC。你是說角JS應用程序不會創建任何會話,因爲它只提供靜態內容? –

+1

在你的例子中,你正在訪問一個圖像(/application/img/sort-icn-down.png),它似乎沒有被一個servlet處理。通過我在上面描述的測試,在這種情況下不會創建會話。但是,如果您的AngularJS客戶端代碼訪問某個servlet,則應該創建一個會話... –

+1

當您詢問「angular JS應用程序是否不會創建任何會話,因爲它只提供靜態內容」時,答案爲是** IF ** AngularJS層只消耗靜態內容。但我認爲情況並非如此,對吧?如果AngularJS層還要求(例如)一個Spring MVC控制器的動態內容,那麼應該在響應中返回一個會話。 –

-1

沒有,角JS不會爲你生成的sessionId。你應該在服務器端生成並管理你的sessionId。如果您的服務器端應用程序創建一個,那取決於你使用框架... Spring MVC的

+0

我在服務器端沒有任何代碼。它只是一個前端角JS應用程序。當瀏覽器正在訪問頁面時,我可以看到Tomcat中的訪問日誌。 –

+0

如何創建會話並在服務器端進行管理?你能提供一個例子嗎? –

+0

我不太瞭解Tomcat,但是一些快速的谷歌搜索應該會爲您提供所需的答案。它很可能取決於您正在使用的Tomcat版本。它看起來像在Tomcat 7 sessionIds可能會自動創建。你應該發佈完整的tomcat配置文件,並將你的問題改爲「我如何在配置文件中生成tomcat中的會話?「 – Ero