2012-04-24 12 views
10

Molti di voi sono probabilmente a conoscenza della nuova legge sulla privacy dell'UE, ma per quelli che non lo sono, significa sostanzialmente che nessun sito gestito da una società residente nell'UE può impostare i cookie classificati come "non essenziali per il funzionamento del sito Web "su una macchina per visitatori a meno che non sia stato espressamente autorizzato a farlo.È possibile bloccare l'impostazione dei cookie utilizzando Javascript o PHP?

Quindi, la domanda diventa come affrontare al meglio questo?

I browser hanno ovviamente la possibilità di bloccare i cookie da un sito Web specifico integrato a loro. La mia domanda è, c'è un modo per fare qualcosa di simile usando JS o PHP?

intercettando tutti i cookie che potrebbero essere tentati di essere impostati (inclusi i cookie di terze parti come Analytics o Facebook) e bloccarli a meno che l'utente non abbia dato il consenso.

È ovviamente possibile eliminare tutti i cookie una volta impostati, ma anche se ciò equivale a non consentire loro di essere impostati in primo luogo, suppongo che non sia abbastanza buono in questo caso perché non aderisce alla lettera della legge.

Idee?

+0

Non è possibile. E 'così semplice. I tuoi cookie di Analytics, ad esempio, verranno probabilmente da un altro host (ad esempio 'analytics.google.com') che non controlli. Per quanto riguarda i tuoi cookie, puoi disinserirli nuovamente dopo averli impostati, ma ... non ha alcun senso, a meno che tu non stia parlando di software di terze parti in esecuzione sul tuo host. – caw

risposta

10

Sono molto interessato anche a questa risposta. Ho realizzato ciò che ho bisogno di realizzare in PHP, ma il componente JavaScript mi ​​sfugge ancora.

Ecco come lo sto facendo in PHP:

$dirty = false; 
foreach(headers_list() as $header) { 
    if($dirty) continue; // I already know it needs to be cleaned 
    if(preg_match('/Set-Cookie/',$header)) $dirty = true; 
} 
if($dirty) { 
    $phpversion = explode('.',phpversion()); 
    if($phpversion[1] >= 3) { 
     header_remove('Set-Cookie'); // php 5.3 
    } else { 
     header('Set-Cookie:'); // php 5.2 
    }   
} 

Poi ho qualche codice aggiuntivo che trasforma questo spegne quando l'utente accetta i cookie.

Il problema è che nel mio sito sono utilizzati plug-in di terze parti che manipolano i cookie tramite javascript e non riescono a scansionarli attraverso loro per determinare quali accedono a document.cookie - possono ancora impostare i cookie.

Sarebbe conveniente se tutti usassero lo stesso framework, quindi potrei essere in grado di sovrascrivere una funzione setCookie - ma non lo fanno.

Sarebbe bello se potessi cancellare o disabilitare document.cookie in modo che diventi inaccessibile ...

EDIT: E 'possibile prevenire l'accesso javascript per ottenere o cookie impostati.

document.__defineGetter__("cookie", function() { return '';}); 
document.__defineSetter__("cookie", function() {}); 

EDIT 2: Per questo al lavoro in IE:

if(!document.__defineGetter__) { 
    Object.defineProperty(document, 'cookie', { 
     get: function(){return ''}, 
     set: function(){return true}, 
    }); 
} else { 
    document.__defineGetter__("cookie", function() { return '';}); 
    document.__defineSetter__("cookie", function() {}); 
} 
1

Che ne dici di not paying attention to hoaxes?

A parte il fatto che si tratta di notizie vecchie, il testo indica chiaramente che si applica solo ai cookie che sono non essenziali per la funzione del sito. Significa che i cookie di sessione, un carrello della spesa o tutto ciò che è direttamente correlato al funzionamento del sito è perfetto. Qualsiasi altra cosa (tracciamento, statistiche, ecc.) Sono "non permessi" senza permesso.

+0

Non è responsabilità dell'utente bloccare i cookie di Google (o di chiunque altro tranne che tu stesso). –

+2

Ma questo è il punto esatto - nell'UE ora lo è, e la legge inizierà ad essere applicata il 25 maggio di quest'anno. Qualsiasi sito che SCEGLIE di ospitare cookie di terze parti è responsabile di spiegare all'utente ciò che fa e dando loro la possibilità di bloccare questi cookie. Binning Analytics ecc. Ovviamente non è un'opzione praticabile, quindi sto cercando qualche altra tecnica – freestate

3

Non è possibile disabilitare completamente, ma è possibile ignorare l'impostazione predefinita con .htaccess

Prova

SetEnv session.use_cookies='0'; 

Se è facoltativa per alcuni utenti non utilizzano .htaccess

if(!$isAuth) 
{ 
    ini_set('session.use_cookies', '0'); 
} 
+0

non ho considerato .htaccess - tuttavia, se ho ragione: 1. questo si applicherà a ogni singolo utente e 2: non c'è modo di consentire quindi i cookie se viene concessa l'autorizzazione? – freestate

+0

hai ragione ... posso aggiornare la risposta per includere il permesso opzionale – Baba

+0

approccio interessante ... questo potrebbe impedire anche ai cookie di terze parti (ad esempio google analytics) di essere impostati? – freestate

7

I codici atta Michaels da qui a venire con questa.

Fondamentalmente utilizza i metodi defineGetter e defineSetter per impostare tutti i cookie sulla pagina e quindi rimuovere quelli specificati dall'utente, questo ruolo potrebbe naturalmente anche essere invertito se questo è ciò che si sta puntando.

Ho provato questo con i cookie di terze parti come Google Analytics e sembra funzionare bene (escluso il cookie __utmb significa che non sono più prelevato in Google Analytics), forse potresti usare questo e adattarlo al tuo specifico esigenze.

Ho incluso la parte su se il nome di un cookie non è __utmb come riferimento, sebbene sia possibile prendere facilmente questi valori da un array e scorrere in questo modo.

Fondamentalmente questa funzione includerà tutti i cookie eccezione di quelle specificate nella parte in cui dichiara if(cookie_name.trim() != '__utmb') { all_cookies = all_cookies + cookies[i] + ";"; }

Si potrebbe aggiungere a questo utilizzando O o e filtri o tirare da un array, base di dati, l'input dell'utente o qualsiasi altra cosa che ti piace di escludere quelli specifici (utili per determinare tra cookie essenziali e non essenziali).

function deleteSpecificCookies() { 

var cookies = document.cookie.split(";"); 
var all_cookies = ''; 

    for (var i = 0; i < cookies.length; i++) { 

     var cookie_name = cookies[i].split("=")[0]; 
     var cookie_value = cookies[i].split("=")[1]; 

     if(cookie_name.trim() != '__utmb') { all_cookies = all_cookies + cookies[i] + ";"; } 


    } 

if(!document.__defineGetter__) { 

    Object.defineProperty(document, 'cookie', { 
     get: function(){return all_cookies; }, 
     set: function(){return true}, 
    }); 

} else { 

    document.__defineGetter__("cookie", function() { return all_cookies; }); 
    document.__defineSetter__("cookie", function() { return true; }); 

} 

} 
Problemi correlati