Domanda

Sto utilizzando i cookie basati sulla sessione con il mio sito Web. Con mia completa sorpresa, ho notato che se impostavo un cookie di sessione (non un cookie persistente), chiudevo una scheda e quindi riconnettevo al sito, i cookie di sessione sono ancora lì. Non è quello che mi sarei aspettato, in realtà. Mi sarei aspettato che i cookie di sessione fossero eliminati.

Se chiudi il browser, un cookie di sessione viene eliminato, quindi perché non chiudere una scheda per ottenere lo stesso risultato?

Pertanto, sto usando PHP5 e jQuery. C'è qualcosa che posso fare in modo tale che quando una scheda è chiusa posso risolvere questo problema di sessione? Sfortunatamente l'evento onbeforeunload sul tag BODY non è utile qui perché quando si fa clic su una pagina si genera quell'evento, non solo chiudendo una scheda.

È stato utile?

Soluzione

Il cookie di sessione è per processo non per finestra. Quindi, anche se hai selezionato Nuova finestra, otterrai comunque lo stesso ID di sessione. Questo comportamento ha senso. Non vorrai che un utente acceda nuovamente ogni volta che ha aperto una nuova finestra durante la navigazione del tuo sito.

Non sono a conoscenza di alcun modo reale per aggirare questo.

Altri suggerimenti

Questo è di progettazione e cercare di cambiarlo è una pessima idea. Cosa succede se un utente apre un collegamento in una nuova scheda e la chiude? La sessione nella scheda originale dovrebbe essere distrutta? Ovviamente no! Questo dimostra perché non dovresti nemmeno pensarci.

Una sessione termina alla chiusura dell'ultima finestra del browser. Se vuoi qualcos'altro, tu:

  1. non vogliono sessioni;
  2. devi creare la tua "mini-sessione" infrastrutture;
  3. sono probabilmente in un mondo di ferite e bug.

Puoi anche scrivere un javascript che rileva quando una scheda è chiusa ed elimina il cookie nel javascript

Se è necessario dipendere dalla chiusura delle schede, è possibile utilizzare l'archiviazione Web della sessione anziché i cookie.

Ho trovato un lavoro in giro.

Sto lavorando in ASP.NET C # . Ho una Pagina master per tutte le pagine del sito tranne la pagina Login . Nella Pagina principale Sever Evento caricamento pagina Ottengo il Url della pagina di riferimento e controllo se contiene la radice del sito, se non reindirizzo alla pagina Login e poiché non ha quella Pagina principale che mostra.

Funziona se provo ad accedere a una pagina da un altro sito o se inserisco Url nella casella dell'indirizzo del browser. Quindi, se chiudi la scheda e provi a rientrare da un'altra scheda o a riaprirla, anche se il cookie non è stato eliminato non puoi rientrare nel sito senza passare da Login . Funziona anche se non hai chiuso la scheda e stai navigando tra siti diversi nella stessa scheda.

Questo è il codice

   if (Request.UrlReferrer == null || !Request.UrlReferrer.AbsoluteUri.ToString().Contains("root"))
        {
            Response.Redirect("~/Account/Login.aspx");
        }

Durante la navigazione dall'interno del sito non ci sono problemi anche se si apre un collegamento a un'altra pagina del sito in un'altra scheda che si apre.

Se vuoi essere inoltre sicuro di poter uccidere la sessione e il cookie di autenticazione in quella clausola if prima di tornare alla pagina Login .

Questo non funzionerà quando un utente accede a un altro sito nella stessa scheda e preme il pulsante torna a del browser perché funziona nella cache e non invia automaticamente una richiesta al server.

Quindi questo non uccide la sessione o il cookie di autenticazione alla chiusura della scheda, ma può aiutare a prevenire il rientro del sito senza accedere dopo aver chiuso la scheda.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top