Maison  >  Article  >  qu'est-ce que jsessionid

qu'est-ce que jsessionid

anonymity
anonymityoriginal
2019-05-05 14:15:2137038parcourir

jsessionid est un cookie. Vous pouvez transmettre "session id" en ajoutant ";jsessionid=xxx" après l'URL ; le conteneur Servlet est utilisé pour enregistrer la session utilisateur et sera automatiquement créé lorsque nous créons une réponse. . Utiliser Pour enregistrer les enregistrements d'accès des utilisateurs.

qu'est-ce que jsessionid

Tout d'abord, JSESSIONID est un cookie, qui est utilisé par le conteneur Servlet (tomcat, jetty) pour enregistrer la session utilisateur.

qu'est-ce que jsessionid

Quand planter JSESSIONID

Lors de la création d'une session, c'est-à-dire lorsque request.getSession() est appelé, il y a aucune information sur getSession Said. Quelques points supplémentaires sont que l'accès au HTML ne créera pas de session. Les pages JSP créeront des sessions par défaut. Vous pouvez désactiver la création automatique de session dans la page JSP

Principe de fonctionnement de JSESSIONID : .

qu'est-ce que jsessionid

Réécriture d'URL

Le serveur crée une session en mémoire et nécessite un cookie, en plus de paramétrer Set- dans la requête en-tête En plus des cookies, les conteneurs tels que Tomcat disposent d'un mécanisme de réécriture d'URL. Ce mécanisme est une stratégie de dissimulation lorsque le cookie client est indisponible. En ajoutant;jsessionid=xxx après l'URL, l'identifiant de session est transmis, afin que la disponibilité de la session puisse être garantie même lorsque le cookie est indisponible. la session elle-même est exposée dans l'URL. Ce n'est pas sûr. Les opinions de base sur Internet sont cohérentes ici

Mais la question la plus critique est de savoir comment Tomcat sait que le cookie client n'est pas disponible. J'ai importé la trace de débogage du code source de Tomcat dans l'idée. Il existe quelques différences dans les différentes versions, mais cela devrait être à peu près le même

tomcat a un org.apache.catalina.connector.Response qui est la classe d'implémentation de Réponse Il existe deux méthodes pour le faire. La réécriture d'URL, respectivement encodeRedirectURL et encodeURL, encodeRedirectURL sera appelée lors de la redirection, encodeURL semble être appelée manuellement, donc par défaut, la réécriture d'URL ne se produira que lors de la redirection. Les codes des deux méthodes sont similaires. Ce qui suit se concentre uniquement sur le commentaire de la méthode 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);
        }
    }

Si nécessaire, insérez l'identifiant de session dans l'URL redirigée. Regardons à nouveau la méthode isEncodeable. J'ai ajouté un commentaire chinois

/**
     * 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);
        }
    }

à l'endroit clé, qui appelle le isRequestedSessionIdFromCookie de l'objet Request pour déterminer si le cookie client est disponible. pour savoir si le cookie JSESSIONID est transmis dans la requête. Ainsi, certaines personnes sur Internet disent que c'est la première visite. En fait, tant que le client ne passe pas JSESSIONID, Tomcat suppose que le cookie n'est pas disponible

.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn