jsessionid ist ein Cookie, indem Sie „;jsessionid=xxx“ nach der URL hinzufügen. Der Servlet-Container wird zum Aufzeichnen der Benutzersitzung verwendet und wird automatisch erstellt, wenn wir eine Antwort erstellen . Zum Aufzeichnen von Benutzerzugriffsdatensätzen.
Zuallererst ist JSESSIONID ein Cookie, das vom Servlet-Container (Tomcat, Jetty) zum Aufzeichnen der Benutzersitzung verwendet wird.
Wann JSESSIONID gepflanzt werden soll
Beim Erstellen einer Sitzung, also wenn request.getSession() aufgerufen wird, gibt es Keine Informationen zu getSession Said. Ein paar zusätzliche Punkte sind, dass beim Zugriff auf HTML keine Sitzungen erstellt werden. Sie können die automatische Sitzungserstellung auf der JSP-Seite deaktivieren:
URL-Umschreiben
Der Server erstellt eine Sitzung im Speicher und benötigt zusätzlich zur Einstellung Set- in der Anfrage ein Cookie Zusätzlich zu Cookies verfügen Container wie Tomcat über einen Mechanismus zum Umschreiben von URLs. Dieser Mechanismus ist eine Vertuschungsstrategie, wenn das Client-Cookie nicht verfügbar ist. Durch Hinzufügen von;jsessionid=xxx nach der URL wird die Sitzungs-ID übergeben, sodass die Verfügbarkeit der Sitzung auch dann gewährleistet werden kann, wenn das Cookie nicht verfügbar ist. Die Sitzung selbst wird in der URL angezeigt. Die Grundmeinungen im Internet stimmen hier überein. Die wichtigste Frage ist jedoch, woher Tomcat weiß, dass das Client-Cookie nicht verfügbar ist. Ich habe den Tomcat-Quellcode-Debugging-Trace in der Idee importiert. Es gibt einige Unterschiede in verschiedenen Versionen, aber er sollte ungefähr gleich sein.
Tomcat hat eine org.apache.catalina.connector.Response, die die Implementierungsklasse von ist Antwort: Es gibt zwei Methoden, um die URL umzuschreiben: encodeRedirectURL und encodeURL. Bei der Umleitung wird encodeRedirectURL aufgerufen. EncodeURL scheint also manuell aufgerufen zu werden, sodass die URL-Umschreibung standardmäßig nur bei der Umleitung erfolgt. Die Codes der beiden Methoden sind ähnlich. Das Folgende konzentriert sich nur auf den Methodenkommentar encodeRedirectURL/** * Encode the session identifier associated with this response * into the specified redirect URL, if necessary. * * @param url URL to be encoded * @return <code>true</code> if the URL was encoded */ @Override public String encodeRedirectURL(String url) { if (isEncodeable(toAbsolute(url))) { return (toEncoded(url, request.getSessionInternal().getIdInternal())); } else { return (url); } }
/** * Return <code>true</code> if the specified URL should be encoded with * a session identifier. This will be true if all of the following * conditions are met: * <ul> * <li>The request we are responding to asked for a valid session * <li>The requested session ID was not received via a cookie * <li>The specified URL points back to somewhere within the web * application that is responding to this request * </ul> * * @param location Absolute URL to be validated * @return <code>true</code> if the URL should be encoded */ protected boolean isEncodeable(final String location) { if (location == null) { return false; } // Is this an intra-document reference? if (location.startsWith("#")) { return false; } // Are we in a valid session that is not using cookies? final Request hreq = request; final Session session = hreq.getSessionInternal(false); if (session == null) { return false; } //这里其实就是网上说的客户端禁用Cookie if (hreq.isRequestedSessionIdFromCookie()) { return false; } // Is URL encoding permitted // servlet3.0后可以在项目web.xml里关掉URL重写,对应tomat7之后 if (!hreq.getServletContext().getEffectiveSessionTrackingModes(). contains(SessionTrackingMode.URL)) { return false; } if (SecurityUtil.isPackageProtectionEnabled()) { return ( AccessController.doPrivileged(new PrivilegedAction<Boolean>() { @Override public Boolean run(){ return Boolean.valueOf(doIsEncodeable(hreq, session, location)); } })).booleanValue(); } else { //这个方法会重写URL return doIsEncodeable(hreq, session, location); } }
Das obige ist der detaillierte Inhalt vonWas ist jsessionid?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!