Première page : Interdiction cookies ou non ?

WRInaute accro
Bonjour

Pour résoudre le problème de mon cache php ( => pages html ), j'ai mis en Javascript, le "user.bypass = true" de tarteaucitron.

Voici ce que celà donne :

Code:
<script type="text/javascript">
var adr2;
var url;
var maintenant;
var future;
var str_future;
var user_agent;
var xsr;
var continent;
var old_continent;
var patt;
var is_bypass;
var etag;
var ts;
var end_cookie;
var str_cookie;
function getCookie(name)
{
    if(document.cookie.length == 0)
        return null;
    var regSepCookie = new RegExp('; ', 'g');
    var cookies = document.cookie.split(regSepCookie);
    for(var i = 0; i < cookies.length; i++)
    {
        var regInfo = new RegExp('=', 'g');
        var infos = cookies[i].split(regInfo);
        if(infos[0] == name)
        {
            return unescape(infos[1]);
        }
    }
    return null;
}
maintenant = new Date();
str_future = maintenant.toLocaleDateString();
var decomposed = str_future.split("/");
future=new Date(decomposed[2], decomposed[1]-1, +decomposed[0] + 365);
adr2='https://www.pronostics-courses.fr/tarteaucitron/new/geoip.php' + '?timestamp=' + maintenant.getTime();
ts=maintenant.toUTCString();
end_cookie=future.toUTCString();
etag=Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 7);
patt=new RegExp('(google|bingbot|bingpreview|msnbot|slurp|duckduckgo|baidu|yandex|sogou|exabot|facebook|facebot|archiver|aolbuild|teoma)', 'gi');
user_agent=navigator.userAgent;
is_bypass=patt.test(user_agent);
xsr=null;
xsr=createXsrObject();
xsr.onreadystatechange = function()
{
    if(xsr.readyState == 4)
    {
        if(xsr.status == 200)
        {
            continent = xsr.responseText;
            old_continent=getCookie('continent');
            if (old_continent!=null)
            {
                continent = old_continent;
            }
            else
            {
                str_cookie='continent=' + continent + '; expires=' + end_cookie + '; path=/';
                document.cookie=str_cookie;
            }
        }
    }
}
xsr.open("GET", encodeURI(adr2), true);
xsr.setRequestHeader("X-Requested-Width", "XMLHttpRequest");
xsr.setRequestHeader("Cache-Control", "no-cache, must-revalidate, proxy-revalidate");
xsr.setRequestHeader("Pragma", "no-cache");
xsr.setRequestHeader("If-None-Match", etag);
xsr.setRequestHeader("If-Modified-Since", ts);
xsr.send(null);
old_continent=getCookie('continent');
if (old_continent!=null)
{
    continent = old_continent;
}
else
{
    continent='US';
}
if((is_bypass)||(continent!='EU'))
{
    tarteaucitron.user.bypass = true;
}
</script>

Dans le ci-dessus, geoip.php rend le continent en deux lettres, avec geoip_continent_code_by_name().

Je suis obligé de mettre continent dans un cookie, sinon il serait undefined ( appel ajax asynchrone ).

Les autres solutions ( (session|local)storage ) , sont trop gourmandes en mémoire.

Il y a deux problèmes :

- Est-ce qu'il faut avoir ou non "user.bypass=true" dans la page de départ ?

C'est-à-dire : La première page doit-elle interdire les services et cookies ?

- Le Google Page Insight semble me donner un is_bypass=false, donc un user agent non présent dans l'expression rationnelle "path".

Ce serait super gentil, si vous pouviez m'indiquer ( à peu près ), la bonne expression pour le user agent du Google Page Insight.

Merci beaucoup pour votre aide.

Amicalement.
 
WRInaute accro
Bonjour

En fait, Google Page Insight soit n'interprète pas le Javascript entièrement ( pas de user.bypass=true ), soit voit une erreur dans mon script.

Ne mettant pas user.bypass=true, il voit les services bloqués, ce que je ne souhaite pas.

Le plus curieux, c'est que pour lui, continent='EU', ce qui indiquerait la capacité de se souvenir des cookies ?

Ceci, dans le cas où son ip serait Européenne.

Quant à la regexp, elle devrait suffire, mais elle semble rendre false, alors que le token "google" figure dans le user agent de Insight.

Je ne comprend pas à quoi est du cette erreur.

Merci beaucoup de votre aide.

Respectueusement.
 
WRInaute accro
Je vous demande pardon.

Problème résolu.

J'ai mis la regexp de cette manière :

Code:
tmp_regexp=/(google|bingbot|bingpreview|msnbot|slurp|duckduckgo|baidu|yandex|sogou|exabot|face(book|bot)|ia_archiver|aolbuild|teoma)/gim;
user_agent=window.navigator.userAgent;
is_bypass=tmp_regexp.test(user_agent);

Maintenant la regexp détecte bien l'user agent de Insight.

Et... "EU" est le continent par défaut au début, mais la valeur correcte est mise en cookie, il n'y a plus besoin d'appel ajax.

Donc... Lors du premier chargement, le "user.bypass=true", ne figure que pour les bots.

Le seul et unique problème, réside dans la nécessité de ce cookie "continent", mais est-ce que ce cookie est acceptable, sachant qu'il est nécessaire à la gestion des cookies ?

Au même titre que tarteaucitron d'ailleurs.

Je ne sais pas comment éviter ce cookie "continent".

Merci de votre aide.

Respectueusement.
 
WRInaute accro
Bonsoir spout

J'ai effacé le cookie continent, et maintenant le cookie tarteaucitron contient en plus :

!permission=NO

ou !permission=YES

suivant que le visiteur est en Europe ou non.

Ce n'est pas une indication de lieu même imprécis, et cette indication est nécessaire au bon fonctionnement de tarteaucitron.

Qui supposerait que ce champ permission indique un lieu ?

Merci beaucoup de me dire si ce problème est réglé.

Respectueusement.
 
WRInaute accro
Rebonjour

L'intérêt de ma solution, c'est que la date d'expiration ne change pas, car le champ "!permission=(NO|YES)" de tarteaucitron n'est jamais mis à jour.

Celà pourrait d'ailleurs poser problème, si l'ordi client ou le smartphone, fait des gros voyages... ;)

Plus généralement, comment adapter en synchrone, n'importe quel script type gestion de cookie à la problématique ( européen | non européen ) ?

Sinon, je peux mettre à jour plus souvent ce champ que annuellement, mais d'après quelle période ?

Merci beaucoup de votre aide. ;)

Amicalement.
 
WRInaute accro
Voilà

Cà marche.

Une fois/jour, le champ permission de tarteaucitron est refait.

Donc... L'appel Ajax n'a lieu q'une fois par jour.

Plus de problème de déplacements des visiteurs.

Jean François Ortolo, relou
 
WRInaute accro
Bonjour

Voilà tout est fait.

Le cookie ne change pas le expires, et l'appel Ajax ( mise à jour du champ permission ), se fait tous les 24h.

A tester. ;)

Respectueusement.



JavaScript:
<script type="text/javascript">

var xsr;
var permission;
var old_permission;
var str_cookie;
var str_debut;
var str_fin;
var drapeau;
/* Ecrit dans le cookie tarteaucitron. */
function write_cookie(field, value, expire)
{
var d = new Date();
d.setTime(expire);
regex = new RegExp('!' + field + "=[^;]+", "g");
cookie = read_cookie().replace(regex, "");
tmp_cookie = 'tarteaucitron=' + cookie + '!' + field + '=' + value;
document.cookie = tmp_cookie + '; expires=' + d.toGMTString() + '; path=/;';
}
/* Lit le cookie tarteaucitron. */
function read_cookie()
{
var nameEQ = "tarteaucitron=";
var ca = document.cookie.split(';');
var i;
var c;
for (i = 0; i < ca.length; i += 1)
{
c = ca[i];
while (c.charAt(0) === ' ')
{
c = c.substring(1, c.length);
}
if (c.indexOf(nameEQ) === 0)
{
return c.substring(nameEQ.length, c.length);
}
}
return '';
}
/* Lit un champ de tmp_cookie. */
function read_field(tmp_cookie, field)
{
var fieldEQ = field + '=';
var ca = tmp_cookie.split('!');
var i;
var c;
for (i = 1; i < ca.length; i += 1)
{
c = ca[i];
while (c.charAt(0) === ' ')
{
c = c.substring(1, c.length);
}
if (c.indexOf(fieldEQ) === 0)
{
return c.substring(fieldEQ.length, c.length);
}
}
return '';
}
var maintenant = new Date();
var adr2='https://www.pronostics-courses.fr/tarteaucitron/new/permission.php' + '?timestamp=' + maintenant.getTime();
var ts=maintenant.toUTCString();
var etag=Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 7);
var tmp_regexp=/(google|bingbot|bingpreview|msnbot|slurp|duckduckgo|baidu|yandex|sogou|exabot|face(book|bot)|ia_archiver|aolbuild|teoma)/gim;
var user_agent=window.navigator.userAgent;
var is_bypass=tmp_regexp.test(user_agent);

drapeau = false;
str_cookie=read_cookie();

/** debut = date de construction cookie. **/
/** expires n'est jamais changé. **/
str_debut=read_field(str_cookie, 'debut');
if(str_debut==='')
{
/** On refait copplètement le cookie. **/
/** Mise à jour debut. **/
/* field value expires +365 days */
write_cookie('debut', maintenant.getTime(), maintenant.getTime() + 31536000000);
str_debut = maintenant.getTime();
drapeau = true;

}

/** fin = date de fin de la période **/
str_fin=read_field(str_cookie, 'fin');
if((str_fin==='')||((maintenant.getTime() - str_fin) > 86400000)) /* 1 day */
{
/** Mise à jour fin sans changer expires. **/
/* field value expires +365 days */
write_cookie('fin', maintenant.getTime(), str_debut + 315360000000);
drapeau = true;
}

old_permission=read_field(str_cookie, 'permission');
if (old_permission != '')
{
permission=old_permission;
}
else
{
permission="NO";
drapeau = true;
}


if(drapeau)
{
xsr=null;
xsr=createXsrObject();
xsr.onreadystatechange = function()
{
if(xsr.readyState == 4)
{
if(xsr.status == 200)
{
permission = xsr.responseText;
/** Mise à jour permission sans changer expires. **/
/* field value expires +365 days */
write_cookie('permission', permission, str_debut + 31536000000);
}
}
}
xsr.open("GET", encodeURI(adr2), true);
xsr.setRequestHeader("X-Requested-Width", "XMLHttpRequest");
xsr.setRequestHeader("Cache-Control", "no-cache, must-revalidate, proxy-revalidate");
xsr.setRequestHeader("Pragma", "no-cache");
xsr.setRequestHeader("If-None-Match", etag);
xsr.setRequestHeader("If-Modified-Since", ts);
xsr.send(null);
}
if((is_bypass)||(permission!='NO'))
{
tarteaucitron.user.bypass = true;
}

</script>
 
WRInaute accro
No way, ce type de cookie n'est pas autorisé: http://ec.europa.eu/ipg/basics/legal/cookies/index_en.htm

Trêve de plaisanterie, si tu mettais toute cette énergie, tout ce temps sur l'amélioration de ton site au design de l'ère d'AOL au lieu de cette cookie notice à la c0n, tu ferais trembler tes concurrents.

Bonjour Monsieur spout

Pour info, le seul cookie mis par ce système de fixation/mémorisation des valeurs (YES|NO) du champ permission, est le cookie tarteaucitron.

A part çà, les champs suivants sont dans tarteaucitron : debut=[0-9]+ et fin=[0-9]+ , ce sont respectivement, les timestamp du debut de période du cookie, et de fin de période.

debut est mis à jour quand permission doit être lue ( une fois/jour ), de manière à ce que permission soit valide en cas de déplacement conséquent du client.

fin est mis à jour quand permission l'est , ou bien que l'un des services change, de manière à ce que le expires du cookie ne soit pas mis par la mise à jour de debut, à une date antérieure, ce qui effacerait le cookie.

En effet, la mise à jour de debut ( ou bien permission ), se fait en affectant à expires, la valeur de fin + 365 days.

Celà, pour que le champ expires change le moins possible, ( CNIL dixit ).

Du moment que le seul cookie en jeu est tarteaucitron, qu'il est nécessaire à la gestion des cookies, et que dans sa version d'origine, il est valide d'après la CNIL, qu'est ce qui empêcherait que ma version soit valide ?

J'accueille avec joie et reconnaissance toutes les suggestions pour adapter mon site au design de l'ère AOL ;) merci de me dire ce qu'il y a à changer ?

Je suppose que je couperai pas aux services d'un designer/graphiste ?

Merci beaucoup de vos réponses.

Cordialement.
 
WRInaute impliqué
wasa c'est quoi ce truc de cookies de 1810
Je n'ai pas cherché à comprendre, pas le temps
Les browsers effacent les cookies pour la plupart (un peu moins automatiquement dans les téléphones mobiles), à la fin d'une session majoritairement.
La CNIL personne dans le monde ne connait...
Et les langages automatiquement créent automatiquement les cookies pour gérer les sessions...
Tout ca pour dire que les cookies... Pas besoin de chercher midi à 14 heures on s'en ...
Peut etre que les magazines, a la CNIl ou a la tele on peut lancer des missiles de sous marins nucléaires avec les cookies, même meme pour le phising les cookies on s'en ...
 
Discussions similaires
Haut