Heim > häufiges Problem > Hauptteil

Was ist jsessionid?

anonymity
Freigeben: 2020-09-10 13:23:24
Original
37045 Leute haben es durchsucht

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.

Was ist jsessionid?

Zuallererst ist JSESSIONID ein Cookie, das vom Servlet-Container (Tomcat, Jetty) zum Aufzeichnen der Benutzersitzung verwendet wird.

Was ist jsessionid?

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:

Was ist jsessionid?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);
        }
    }
Nach dem Login kopieren

. Fügen Sie bei Bedarf die Sitzungs-ID in die umgeleitete URL ein. Schauen wir uns noch einmal die isEncodeable-Methode an. Ich habe an der Schlüsselstelle einen chinesischen Kommentar

/**
     * 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);
        }
    }
Nach dem Login kopieren

hinzugefügt, der isRequestedSessionIdFromCookie des Request-Objekts aufruft, um festzustellen, ob das Client-Cookie verfügbar ist soll lesen, ob das JSESSIONID-Cookie in der Anfrage übergeben wird. Einige Leute im Internet sagen daher, dass es sich um den ersten Besuch handelt. Solange der Client JSESSIONID nicht übergibt, geht Tomcat tatsächlich davon aus, dass das Cookie nicht verfügbar ist

Das obige ist der detaillierte Inhalt vonWas ist jsessionid?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage