Rendre variable la durée de vie d'un cookie

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Rendre variable la durée de vie d'un cookie

Re: Rendre variable la durée de vie d'un cookie

par Dr@ke » 08 mars 2010, 00:45

Perso j'ai beaucoup appris grâce à ce forum aussi :wink:

Re: Rendre variable la durée de vie d'un cookie

par Castor Gaspard » 08 mars 2010, 00:27

Bonsoir,

Merci, Messieurs, pour vos brillantes explications. :) Vous êtes pédagogues, j'ai facilement compris vos propos.

Quand on cherche sur Google des solutions, on trouve une multitude de pages qui répondent à tout, sauf au problème posé ou partiellement. Ici, c'est rapide et efficace.

Encore merci.

Cordialement,

Gaspard

Re: Rendre variable la durée de vie d'un cookie

par AB » 07 mars 2010, 19:24

Ou alternativement si tu as un tableau php tu peux le sérialiser http://php.net/manual/fr/function.serialize.php avant de le passer dans ton cookie

Re: Rendre variable la durée de vie d'un cookie

par Dr@ke » 05 mars 2010, 15:06

L'exemple plus haut n'utilise pas de tableau.
explode() ne travail pas sur les tableaux mais sur une chaine.
http://php.net/manual/fr/function.explode.php

La valeur du cookie ne doit pas être un tableau.
Par contre on peut traiter la valeur du cookie comme on le désire une fois récupérée.

_____________________
Exemple...
<?php
$month = 'janvier';
setcookie('mois', $month);
?>
A présent, je veux ajouter à $month février en rappelant mon cookie : comment dois-je m'y prendre ?
<?php
$janvier = 'janvier';
$fevrier = 'fevrier';
$valeur = $janvier  . $fevrier;

setcookie('mois', $valeur);

echo $valeur;  // retourne: janvierfevrier
?>
Pas top pour récupérer la valeur du cookie, si cela te retourne janvierfevrier, surtout si ensuite tu aimerais modifier les mois...

Donc, si on ajoutait un délimiteur, pour séparer les deux variables?
Go:
<?php
$janvier = 'janvier';
$fevrier = 'fevrier';
$valeur = $janvier  . "-$fevrier";

setcookie('mois', $valeur);

echo $valeur;   // retourne: janvier-fevrier
?>
Là c'est beaucoup mieux, cela nous retourne janvier-fevrier.

Comment faire maintenant pour se servir de ce délimiteur?
En utilisant la fonction explode().
<?php
$valeur = 'janvier-fevrier';
list($janvier, $fevrier) = explode('-', $valeur);

echo "première valeur: $janvier et deuxième valeur: $fevrier";
?>

Re: Rendre variable la durée de vie d'un cookie

par Castor Gaspard » 05 mars 2010, 11:18

Bonjour,

Merci pour votre aide, et la proposition de ccokie. La documentation de Php sur le sujet est brève. :cry:

En revanche, je comprends l'intérêt de limiter le nombre de cookies. Mais, si j'ai suivi, quand on passe un tableau, il y a un cookie par élément.

Aussi, ma question est la suivante : si je veux ajouter un élément à la valeur, suis-je obligé de passer par un tableau ? Sinon, comment pratiquer ?

Exemple...
<?php
$month = 'janvier';
setcookie('mois', $month);
?>
A présent, je veux ajouter à $month février en rappelant mon cookie : comment dois-je m'y prendre ? :?:

Merci.

Gaspard

Re: Rendre variable la durée de vie d'un cookie

par Dr@ke » 04 mars 2010, 01:40

Oui comme dit AB, ce n'est pas super fiable comme méthode mais bon :wink:

Sinon pour éviter de faire pleins de cookies.
Il y a plusieurs possibilités, dont celle d'insérer la date avec ton incrément dans la valeur du cookie...

Exemple:
// création du cookie
$jour = date('j-g');
$valeur = $jour . '_1';
setcookie('count', $valeur);

// récupération de la valeur du cookie dont la date et l'incrément
list($jour, $count) = explode('_', $_COOKIE['count']);

// incrémenter sans écraser la date
$count = $count + 1;
$valeur = $jour . "_$count";
setcookie('count', $valeur); 
Ensuite tu vérifies et compares la date présente dans la valeur du cookie (la variable $jour)...

Re: Rendre variable la durée de vie d'un cookie

par AB » 04 mars 2010, 00:06

A savoir quand même que tout utilisateur un peu averti, peut soit interdire les cookies sur ton site, soit les autoriser puis les effacer ou encore les modifier. Cette solution est donc à n'utiliser que pour des besoins qui ne demandent pas une bonne sécurité :wink:

Re: Rendre variable la durée de vie d'un cookie

par Castor Gaspard » 03 mars 2010, 23:46

Bonsoir,

Merci du conseil. Finalement, j'ai préféré employé une méthode plus brutale : envoyer un cookie par connexion, puis les compter.

Cordialement,

Gaspard

Re: Rendre variable la durée de vie d'un cookie

par Dr@ke » 03 mars 2010, 03:12

Il ne faut pas recréer de cookie si l'utilisateur en possède déjà un.
Et donc ne pas ré-écraser son cookie sauf si le temps est dépassé...

Personnellement, j'utiliserai plutôt les fonctions date() et strtotime()
http://php.net/manual/fr/function.date.php

Petit exemple:
<?php
$jour = date('j-g');
$demain = date('j-g', strtotime('+1 day'));
$hier = date('j-g', strtotime('-1 day'));

echo $jour . '<br>' . $demain . '<br>' . $hier;
?>
Ensuite il suffit de comparer... :wink:

Rendre variable la durée de vie d'un cookie

par Castor Gaspard » 03 mars 2010, 00:34

Bonsoir,

J'ai encore une question à soumettre aux émérites lecteurs de ce forum.

Imaginons que je veuille limiter à deux consultations par jour la même page, en recourant à un cookie.

Logiquement, j'incrémente un compteur sous la forme...
<?php
if(isset($_COOKIE['count']))
{
	$count = $_COOKIE['count'];
	$count++;
	setcookie('count',$count,time()+24*3600); 
	if ($count >= 2)
	{
		print 'Vous ne pouvez plus accéder à cette fonctionnalité.';
	}
}
else
{
	$count = 1;
	setcookie('count', $count, time()+24*3600);
}
?>
Seulement, imaginons que le visiteur lance le script à 10 h 00, puis à 18 h 00 le 1er janvier. Avec mon code, il sera bloqué jusqu'au 2 janvier à 18 h 00, alors qu'il devrait pouvoir relancer le script une fois à partir de 10 h 00 le 2 janvier. (J'espère être clair !).

Comment contourner la difficulté ?

Un grand merci !

Bien à vous,

Gaspard