2012-06-18 18 views
18

Voglio memorizzare i dati cliccati dall'utente in un cookie che non deve mai andare al server. È come un dato aggiunto alla sessione, che voglio persistere durante le sessioni, poiché nei dati continua ad aggiungersi al cookie, e viene memorizzato per un lungo periodo di tempo, e viene eliminato solo quando l'utente rimuove la cronologia di navigazione. Il cookie è un cookie solo client e non deve mai accedere al server, poiché non ho bisogno dei dati generati dall'utente sul server, quindi voglio eliminare l'overhead aggiuntivo che il cookie crea nell'invio avanti e indietro tra browser e server. È possibile raggiungere questo?Cookie solo client - cookie che non vanno mai al server

+0

Può noi il codice per quello che hai provato mostrare? –

+1

A seconda del browser di destinazione, è possibile guardare localStorage - http://paperkilledrock.com/2010/05/html5-localstorage-part-one/ – Archer

+0

'localstorage' è escluso, in quanto ho bisogno di supportare i browser più vecchi, di tutti i più importanti Mark: ho raggiunto tutte le funzionalità, ad eccezione di "pure client side only cookie". Sto creando il cookie con il nome appropriato - coppia valore, data di scadenza e il percorso utilizzando il codice che ho trovato su quirksmode. Sono in grado di controllare il cookie utilizzando javascript. Solo che non sono in grado di raggiungere la parte "cookie solo client". Spero che tu abbia la mia domanda? –

risposta

4

Se la compatibilità del browser è un problema, è possibile utilizzare un javascript per avvolgere varie tecnologie diverse. Le versioni precedenti di IE supportano (supprise supprise) una versione proprietaria di localstorage chiamata userData (non penso che sia esattamente la stessa cosa, ma dovrebbe fare quello che ti serve).

Uno script di wrapper come http://www.jstorage.info/ o https://github.com/marcuswestin/store.js dovrebbe fare ciò che è necessario fare.

+0

Grazie mille @Bulk, darò uno scatto. Personalmente preferirei una soluzione cookie indipendente dal browser, in tal caso i miei casi di insuccesso verrebbero abbattuti al limite delle dimensioni forzate di due browser sul cookie e ai cookie disabilitati sul browser (anche i dati utente/l'archiviazione locale possono essere disabilitati e Immagino che questo caso di fallimento possa essere escluso). –

+1

Non posso dirlo con certezza, sono sicuro al 99% che non esiste una soluzione basata su "cookie", ma sentitevi liberi di continuare a cercare :) –

2

Sono sicuro al 100% che non è possibile forzare i cookie solo sul lato client, vengono comunque inviati al server. Tuttavia, è possibile fare il contrario: solo cookie lato server (non leggibili da javascript) impostando il flag HttpOnly sul cookie.

8

So che è un po 'tardi per te, ma questa risposta è per tutti coloro che hanno lo stesso problema.

1) Con HTML5 è possibile utilizzare web storage.

2) (Solo un'idea! - non testato!) È possibile definire un cookie (tramite javascript sul client) e impostare l'attributo "sicuro". In questo caso, il cookie verrà inviato al server solo su connessioni HTTPS. Per assicurarsi che il cookie non lascia mai il browser, non si può mai aprire una connessione HTTPS ;-)

Aggiornamento:

Si potrebbe anche semplicemente impostare il percorso del cookie per un percorso che in realtà non lo fa esistere.

document.cookie="name=value;path=/notExistingPath"; 
+0

Ho avuto la stessa idea con 2), ma non funziona. Non è possibile accedere ai cookie sicuri da JS (almeno non in FF). 1) funziona alla grande! – Lodovik

+1

Oh giusto. Ho dimenticato l'accesso a js. Ho provato a trovare una soluzione anche per i browser che non supportano ancora lo spazio web. Potresti provare a impostare un valore di percorso dei cookie su un percorso che non esiste. Quindi il cookie non dovrebbe mai essere inviato. (non testet. pls prova a rispondere al risultato) –

+0

Non utilizzare 'path =/notExistingPath' se vuoi che il tuo cookie funzioni su IE o Edge Browser – amanteaux

0

utilizzare un percorso impossibile per impostare il cookie:

document.cookie = "cookieName=...; expires=... ; path=/never_reached/ablkappmqlnahsuia"; 
Problemi correlati