Servlet無法區分請求是由某個腳本還是人類生成的,因爲這兩個請求都來自同一個瀏覽器,因此會發送相同的JSESSIONID。所以你必須標記這些請求以區分它的來源。您可以通過某些標題或請求參數標記它們。
我喜歡你的存儲訪問時間在會議的變量的想法(這將小豬回servlet會話到期) 你的算法會在這種情況下:
if isUser(request){
session.lastRobotAccess == null
}else{
if (session.lastRobotAccess == null) {
session.lastRobotAccess = current_time
} else {
if(current_time - session.lastRobotAccess > session.timeout){
session.invalidate
}
}
}
當請求到達servlet容器是第一由過濾器處理(如果已定義),然後由servlet處理。 Filters are useful for:
的過濾器常見的情況是,你要應用 預處理或後處理的請求或響應對servlet的一組 ,而不僅僅是一個單一的servlet之一。如果您只需要修改一個servlet的 請求或響應,則不需要創建一個 過濾器 - 只需在servlet本身中直接執行即可。
由於您可以通過過濾器訪問會話,因此它們更適合您的邏輯。您不會通過額外的檢查來污染servlet的邏輯,並且可以將其應用於其他servlet。過濾器也是servlet規範的一部分,所以它可以在任何容器中工作。
你已經知道這件事了,但我剛剛把它們放在「紙」上:-D
感謝您使用過濾器的想法。 –