Sessioni

Sessioni e motori di ricerca

L’utilizzo delle sessioni è necessario in diversi casi e in particolare per:

  • Seguire il percorso dell’utente sul sito
  • Memorizzare alcune informazioni (come il contenuto di un carrello d’acquisto)

Le informazioni relative alle sessioni sono salvate in un file sul server. Questo file è unico e per ogni utente si genera un identificativo. Quest’ultimo è costituito da una stringa di testo di massimo 32 carattere. Permette di creare una corrispondenza tra l’utente e il file che contiene le informazioni di sessione.

L’identificativo può essere salvato in un cookie (sulla postazione dell’utente, dunque). È ciò che avviene comunemente. Tuttavia, se l’utente non accetta i cookie, è possibile trasmettere l’ID via l’URL. Di certo vi sarà capitato di vedere alcuni URL che contengono una stringa simile a questa: ?PHPSESSID=a9e8dc705da1560e9b6d4c1a65ae3245.

I problemi delle sessioni per l’ottimizzazione

Bisogna sapere che i motori di ricerca non accettano i cookie. Di conseguenza, un gran numero di siti agirano l’ostacolo utilizzando gli URL per trasmettere gli ID di sessione. Ed è lì che si origina il problema.

I robot indicizzano questo tipo di URL, si tratta di un’azione di facile verifica. Per verificare quanto appena detto, basterà inserire la query seguente in un motori di ricerca a vostra scelta.

In media (dipende dalla configurazione del server), i file di sessione restano salvati per trenta minuto. Dunque, nel momento in cui il robot ritornerà sul sito, si genererà una nuova sessione con un nuovo URL da indicizzare. Il contenuto sarà identico alla pagina precedentemente visitata dal robot. I robot potranno allora indicizzare centinaia di volte la stessa pagina.

Come potete immaginare, dopo un certo periodo di tempo, i motori di ricerca riscontrano tre problemi importanti:

  • URL non perenni
  • Duplicate content
  • Numero infinito di pagine da indicizzare

Esiste una soluzione per far sparire le sessioni?

Affermare che non bisogna utilizzare le sessioni non è una soluzione ipotizzabile. Di fatto, come abbiamo precisato a monte in questo articolo; le sessioni possono rivelarsi molto pratiche per gli sviluppatori. Come fare, dunque, per eliminare gli ID di sessione negli URL? È possibile prendere in considerazione diverse soluzioni:

  • Aprire una sessione soltanto quando è effettivamente utile. Alcuni siti aprono una sessione già dalla prima pagina visitata mentre, in realtà, l’utilizzano soltanto dopo che l’utente avrà fatto il login
  • Trasmettere l’ID principalmente attraverso i cookie e non via gli URL
  • Privarsi degli utenti che non accettano i cookie e vietare la trasmissione degli ID negli URL
  • Individuare i robot e avviare le sessioni soltanto per gli utenti.

Vietare gli ID di sessioni via htaccess

SetEnv SESSION_USE_TRANS_SID 0

Vietare gli ID di sessione nell'URL via il php.ini

session.use_trans_sid = 0

Per i server IIS, abbiamo già avuto modo di vedere un network administrator risolvere il problema attraverso una semplice opzione del suo pannello di controllo.

Vietare la trasmissione degli ID di sessione nell’URL

/* Disattivazione dell’aggiunta dell’ID di sessione agli URL */
ini_set('session.use_trans_sid', "0");
/* Autorizzazione per l’utilizzo dei cookie */
ini_set('session.use_cookies', "1");
/* Autorizzazione per l’utilizzo ESCLUSIVO dei cookie */
ini_set('session.use_only_cookies', "1"); */
/* Divieto di aggiunta degli ID di sessione nel codice html generato */
ini_set("url_rewriter.tags","");
/* Tutto sotto controllo, avviare la sessione */ session_start();

Sarebbe possibile riassumere con molto meno, ma da paranoici quali siamo, abbiamo preferito fornirvi i codici nella maniera più dettagliata possibile J

Individuare i robot in PHP

Esistono diversi metodi per individuare i robot. Per esempio, è possibile controllare l’user agent, l’host e l’IP di ciascun visitatore e solo in seguito avviare o meno una sessione. Ecco una proposta per controllare unicamente l’user agent:

<?php
function checkUaRobot(){
$robot = false;
$_UA = array("GoogleBot", "Slurp","MsnBot");
// Potrete completare questa lista con tutti gli UA che desiderate

foreach($_UA as $ua) {
// Compariamo l’user agent del visitatore con quelli della nostra lista
if(eregi($ua,$_SERVER["HTTP_USER_AGENT"])) return true;
}

// L'UA non è nella nostra lista, si tratta di un utente umano
return false;
 }
?>

// Chiamiamo la funzione
if (!checkUaRobot()) { session_start(); }
?>

Un’ultima “soluzione” è quella di lasciare che Google se la sbrighi da solo. Applicherà autonomamente, un giorno o l’altro, una selezione, eliminando le pagine duplicate… Ma ve lo sconsigliamo.

Oseox Monitoring