2013-01-19 14 views
8

Ho notato che le applicazioni Grails, come la maggior parte delle altre applicazioni Web basate su Java, creano sempre una sessione, anche quando non viene utilizzata.Grail senza sessione

È possibile impostare il cookie JSESSIONID solo quando necessario, ad es. quando qualcuno tenta di accedere?

+1

perché dovresti preoccuparti di questo? – Gregg

+0

due motivi: 1) se si crea una sessione, verrà impostato un cookie. Se interpreto la nuova "European Cookie Law" nel modo giusto, devi chiederti ai visitatori di legare prima di impostare un cookie. 2) una sessione utilizza risorse. Se non ho bisogno della sessione, perché dovrei crearne una? E se espongo un'interfaccia REST e il client ignora i cookie, ogni richiesta creerà una nuova sessione :-( – rdmueller

+0

Si dovrebbe fare qualche ricerca in più: consenso non necessario Qualsiasi cookie che, se non fosse per la sua presenza, il sito web sarebbe cessare di essere utilizzabile, ad esempio un cookie di sessione che mantiene il contenuto del paniere di un cliente attraverso il processo di checkout. Detto questo, se si dovesse utilizzare questo stesso cookie per tracciare il comportamento del cliente senza prima chiederlo, allora questo richiederebbe il consenso. : //www.enchiladadigital.com/services/cookie-audits/eu-cookie-law-what-you-need-to-know/ – Gregg

risposta

4

La generazione di un cookie di sessione può essere disabilitato aggiungendo la seguente direttiva di pagina:

<%@ page session="false" %> 
1

Non sono sicuro di quale versione di graal veniva usato sopra, ma correvo in un problema simile in una grande applicazione. La mia applicazione è stata divisa tra interfaccia utente/gsp e altri controller che hanno fornito puro json/xml senza visualizzazione. La parte dell'interfaccia utente doveva essere l'unica parte che utilizzava le sessioni, ma i servizi restituivano anche JSessionId.

Poiché l'applicazione è grande, al fine di risolvere i problemi, ho creato nuove applicazioni con Grails 1.3.7 e 2.2.1, con un controller di base:

class FooController { 
    static defaultAction = "lookatme" 
    def lookatme = {render(view:'lookatme')} 
    def hallo = {render(text:"<xml>some xml</xml>",contentType:"text/xml",encoding:"UTF-8")} 
    def somestate = {session.foo = "bar"; render(text:"<xml>some xml</xml>",contentType:"text/xml",encoding:"UTF-8")} 
} 

Quando ho eseguito questo su Tomcat, né lookatme oppure hallo restituisce un ID sessione. L'azione somestate fa. Dopo aver recuperato il codice, abbiamo trovato dei luoghi (alcuni filtri, ad esempio) che stavano tentando di accedere alla sessione quando non dovevano.

Se il codice sta tornando una sessione tramite cookie JSESSIONID, e non si pensa che dovrebbe, assicurarsi che ci sia alcun codice utilizzato all'interno di tale azione (o filtri) il cui accesso session (o flash?).