Come eliminare il JSESSIONID dalle url; pro e contro

Postato da regole-seo, in Approfondimenti SEO

Indice articoli "JSESSIONID"

eliminare-jsessionid

Nell’articolo precedente abbiamo visto che cos’è il JSESSIONID e perché compare nelle url.
E’ arrivato dunque il momento di capire come eliminare il JSESSIONID dalle url e quali sono i pro e i contro di questa operazione.

La soluzione che propongo è una soluzione applicativa e prevede dunque l’inserimento di codice nella vostra applicazione web per eliminare definitivamente il JSESSIONID dalle vostre url.

Poiché, come visto in precedenza, il JSESSIONID rappresenta l’implementazione JAVA dell’HTTP session token, la soluzione è utilizzabile in una applicazione web JAVA e più precisamente quello realizzato altro non è che un Filter JAVA.

Ecco il codice completo:

package mio.package.filter;

import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.log4j.Logger;

public class DisableJSID implements Filter{

   private static Logger log = Logger.getLogger(DisableUrlSessionFilter.class);

   public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
      throws IOException, ServletException{
      // Controllo per agire solamente su richieste di tipo http
      if (!(request instanceof HttpServletRequest)){
         chain.doFilter(request, response);
         return;
      }

      HttpServletRequest httpRequest = (HttpServletRequest) request;
      HttpServletResponse httpResponse = (HttpServletResponse) response;

      //Invalidiamo la sessione se viene trovato l'identificativo nella url
      if (httpRequest.isRequestedSessionIdFromURL()){
         log.info("Trovato identificativo di sessione nella url");
         HttpSession session = httpRequest.getSession();
         if (session != null){
            session.invalidate();
            log.info("sessione invalidata");
         }
      }

      // Wrapper di httpResponse per aggirare l'URL encoding
      HttpServletResponseWrapper wrappedResponse =
                                              new HttpServletResponseWrapper(httpResponse){
         @Override
         public String encodeRedirectUrl(String url) { return url; }

         @Override
         public String encodeRedirectURL(String url) { return url; }

         @Override
         public String encodeUrl(String url) { return url; }

         @Override
         public String encodeURL(String url) { return url; }
      };

      chain.doFilter(request, wrappedResponse);
   }

   public void init(FilterConfig config) throws ServletException {}

   public void destroy() {}
}

Il compito di questo Filter è quello di realizzare un wrapper per l’oggetto HttpServletResponse ridefinendo i seguenti metodi in modo tale che non realizzino più l’url rewriting che andrebbe ad appendere il JSESSIONID alle nostre url.

Una volta realizzato il filter basterà mapparlo nel file web.xml della nostra applicazione nel seguente modo:

<filter>
   <filter-name>DisableJSID</filter-name>
   <filter-class>mio.package.filter.DisableJSID</filter-class>
</filter>
<filter-mapping>
   <filter-name>DisableJSID</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

Una volta che il nostro Filter è in azione il JSESSIONID scomparirà dalle nostre url.
Questo significa che un eventuale link costruito tramite il tag <c:url> o un’operazione di redirect eseguita tramite <c:redirect> della tag library JSTL non produrrà più una url contenente il JSESSIONID nel caso in cui il client abbia i cookie disabilitati.

Come abbiamo visto nell’articolo precedente “JSESSIONID: Cosa è e perchè compare nelle URL?” poiché gli spider dei motori di ricerca non accettano i cookie se non adottassimo il nostro Filter, ad ogni visita del nostro sito essi potrebbero indicizzare una determinata pagina sotto una url differente a causa del JSESSIONID che ogni volta viene creato per quella determinata sessione di navigazione.

Il vantaggio che deriva dunque dall’eliminazione del JSESSIONID dalle url è indubbiamente quello di evitare che gli spider dei motori di ricerca rilevino contenuti duplicati (sotto url che differiscono per JSESSIONID). Inoltre eliminando il JSESSIONID dalle url otteniamo delle url più amichevoli e inerenti al contenuto della pagina a cui si riferiscono.

Esiste però anche uno svantaggio derivante dall’eliminazione del JSESSIONID dalle url.
Infatti per tutti gli eventuali utenti che avranno i cookie disabilitati non sarà possibile mantenere traccia della sessione.
Il JSESSIONID è infatti l’unico modo tramite il quale il server è in grado di associare la sessione all’utente qualora quest’ultimo avesse i cookie disabilitati.

Le conseguenze di questo approccio vanno dunque determinate sulle singole applicazioni, cercando di valutare se questo aspetto è accettabile e verificando, ad esempio, se l’attuale navigazione del sito è stata costruita pensando agli utenti con cookie disabilitati (es. utilizzo del tag <c:url>).

Articolo 3 di 4
     Articoli correlati
  1. JSESSIONID: Cosa è e perchè compare nelle URL?
  2. Come eliminare da Google le url indicizzate
  3. JSESSIONID e SEO
  4. Contenuti duplicati – identificazione

Scrivi un commento