Jsessionid只是tomcat的對sessionid的叫法,其實就是sessionid;在其它的容器也許就不叫jsessionid了。java
首先這是一個保險措施 由於Session默認是須要Cookie支持的,但有些客戶瀏覽器是關閉Cookie的,因此在這個時候就須要在URL中指定服務器上的session標識,也就是EDE802AB96CD1E0CA2AFB3830D18FB10,每當用戶第一次訪問頁面的時候,後端獲取的地址是包含 jsessionid參數,這樣拼接 靜態資源或者A標籤或Form的地址的時候,連接就變成了:web
http://localhost:8080?jsessionid=EDE802AB96CD1E0CA2AFB3830D18FB10home/user 形成訪問相關頁面404.spring
web.xml配置後端
<session-config> <tracking-mode>COOKIE</tracking-mode> <tracking-mode>URL</tracking-mode> <tracking-mode>SSL</tracking-mode> </session-config>
以上是Servlet3.0最會話跟蹤的三個方式,Servlet 3.0規範實施前tomcat的會話跟蹤用兩種方法:COOKIE和帶JSESSIONID參數的重寫URL。 在 Tomcat 7中的URL重寫方法再也不是強制性的,並加入一個新的會話跟蹤方法基於SSL會話。瀏覽器
移除<tracking-mode>URL</tracking-mode> 就解決了jsessionid的問題。tomcat
spring boot三種方式springboot
1.啓動類 繼承 SpringBootServletInitializer 重寫onStartup方法 服務器
@Override public void onStartup(ServletContext servletContext) throws ServletException { super.onStartup(servletContext); servletContext.setSessionTrackingModes(Collections.singleton(SessionTrackingMode.COOKIE)); SessionCookieConfig sessionCookieConfig=servletContext.getSessionCookieConfig(); sessionCookieConfig.setHttpOnly(true); }
2.在@Configuration配置類上註冊beansession
@Bean public ServletContextInitializer servletContextInitializer1() { return new ServletContextInitializer() { @Override public void onStartup(ServletContext servletContext) throws ServletException { servletContext.setSessionTrackingModes(Collections.singleton(SessionTrackingMode.COOKIE) ); } }; }
3.在springboot properties配置ide
server.session.tracking-modes=