8725 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Sur la page d'accueil de mon site, j'effectue un test pour m'assurer que le navigateur client accepte les cookies.
Je définis donc un cookie et je redirige ensuite vers une page qui va tester ce cookie et qui affichera (ou non) un message indiquant à l'internaute de vérifier sa configuration.

Pour cela j'utilise le code suivant :

setcookie('cookie',"enabled",time()+60); }
header("Status: 301 Moved Permanently", false, 301);
header("Location:  http://"  . $_SERVER["SERVER_NAME"] . "/enter.php");

Malheureusement, il semblerait que cela ne fonctionne pas avec tous les navigateurs, notamment avec Opera 9.01 : le cookie n'est pas créé.

Est-ce impossible d'envoyer un cookie et de rediriger dans la meme page ?
Ces deux en-tetes seraient-ils incompatibles entre-eux ?
Modifié par Cyoul (10 Oct 2006 - 05:30)
Salut Cyoul,

j'ai fait le test suivant sur Opera (9.02)

page1.php
<?php
setcookie('cookie',"enabled",time()+60);
header("Status: 301 Moved Permanently", false, 301);
header("Location:   http://127.0.0.1/Test/enter.php");
 
?>

enter.php
<?php
echo $_COOKIE['cookie'];
?>

et ça fonctionne sans problème.

Alors soit la gestion des cookies est désactivée dans ton Opera Smiley cligne soit je n'ai pas bien compris ta question Smiley biggol

@+
Salut Heyoan,

Tout d'abord merci d'avoir testé Smiley cligne

Mais le fait que cela fonctionne chez toi m'a laissé un peu perplexe, j'ai donc retesté sur mon serveur local et ensuite sur mon hébergement.

Et bizarrement, cela fonctionne sur mon serveur local (PHP installé en tant que module Apache) mais pas chez mon hébergeur (PHP installé en tant que module CGI) Smiley ohwell

Serait-ce du au fait que PHP soit installé en tant que CGI que cela ne fonctionne pas ?

Et si c'est le cas, quelle solution ?

PS : Voici les configs retournées par phpinfo() : local (pdf) et serveur (pdf)
Salut Cyoul !

J'ai refait un test après avoir uploadé sur le serveur (j'ai également un hébergement sur OVH avec PHP en CGI) et cela fonctionne aussi Smiley ohwell

je te remets le code que j'ai utilisé :
page1.php
<?php
setcookie('cookie_test',"enabled",time()+60);
header("Status: 301 Moved Permanently", false, 301);
header("Location:   http://".$_SERVER["SERVER_NAME"]."/enter.php");
 
?>

enter.php
<?php
echo 'cookie_test:';
echo $_COOKIE['cookie_test'];
?>


Alors question 1 : as-tu créé une règle particulière de rewriting sur le 301 dans un htaccess ?
Question 2 : et d'ailleurs à quoi te sers la ligne ...Status 301... ?
Question 3 :En relisant ton premier post je vois une accolade à la fin de ta ligne setcookie... -> Est-ce que tu effectues un test avant et si oui le problème ne viendrait-il pas de là ?

@+ Smiley cligne
Salut Heyoan,

Alors là j'y comprends plus rien, j'ai placé identiquement les mêmes fichiers que toi sur mon hébergement pour faire le test, et ca fonctionne pas chez moi Smiley ohwell

- Aucune règle définie dans le .htaccess (d'ailleurs pas de fichier .htaccess).
- Le renvoi du status 301 m'a été conseillé pour ne pas avoir de problème avec le référencement, et Google plus particulièrement, suite à cette redirection.
- J'effectuais un test avant pour vérifier si le cookie existait déja avant de le créer, mais je l'ai supprimé pour le moment, donc actuellement j'ai identiquement le même code que toi.

Donc la je commence vraiment à mettre en doute mon navigateur Smiley ohwell

Pourrais-tu tester sur mon hébergement : ici ?
upload/8634-testkerozon.png

OK sur IE / FF / Opera et Netscape Smiley cligne

Je pense que cela vient effectivement du paramétrage dans ton navigateur... ou alors il faut vider le cache ?


[*EDIT]

Petite remarque : que se passe-t-il si ton visiteur arrive directement sur enter.php ? ton test ne marche plus puisque le cookie n'a pas encore été créé... Donc je pense que ce serait mieux de créer ton cookie sur enter.php et de faire ton test après (en supposant que tu testes un login password dans un auth.php par exemple) ce qui donnerait :

enter.php
<?php
if ( !isset($_COOKIE["test_cookie"]) )
{
setcookie("test_cookie","1");  
}

if ( isset($_GET['erreur_cookie']) )
	{
$erreur_cookie  = $_GET['erreur_cookie'];
	}
else
	{
$erreur_cookie  = 'N';
	}
...

auth.php
<?php
// Test gestion des cookies
if ( !isset($_COOKIE["test_cookie"]) )
{
header("Location: ../enter.php?erreur_cookie=O");
exit(); 
}
...

[/EDIT]

@+
Modifié par Heyoan (06 Oct 2006 - 03:18)
A force d'essais, j'ai enfin réussi à faire ce que je désirais

Il semblerait que le fait d'avoir supprimé la définition de la date d'expiration du cookie ai réglé le problème.

Donc en remplacant :
setcookie('cookie',"enabled",time()+60);
par :
setcookie('cookie',"enabled");

Quand à la cause, je doute toujours ... Peut-être est-ce du à une différence d'heure ou de fuseau horaire entre le serveur et le client ...

Heyoan,

Concernant ta question, je teste le cookie sur la page enter.php et j'affiche un message "explicatif" à l'utilisateur si le cookie n'existe pas en le renvoyant vers la page "page1.php".

Je teste également si accès direct à enter.php, etc ...

Pas de souci de ce coté la, mon problème était uniquement lié à la création du cookie donc résolu Smiley biggrin

Merci pour tout Smiley cligne
Salut à tous les deux, je vois que vous en connaissez un bout sur le sujet des cookies...
Voici ma question, en espérant que vous aurez une réponse...

Je viens de changer de serveur, toujours chez OVH. L'ancien était un RedHat 7.2, assez classique chez OVH, quand on y comprend rien en Linux, comme moi.
Pour le nouveau, je me suis fait aider, et le mec m'a installé un Gentoo.
A priori, ca ne change rien, enfin, je crois...

J'avais mis en place sur mon site, une création de cookie toute bête pour "ne pas oublier" les visiteurs, et qu'ils n'aient pas à remettre leurs identifiants à chaque fois. Ca marchait à merveille.

Et là, changement de serveur, ca ne marche plus.

Voici un petit bout de code...

if(!isset($_COOKIE['log']) OR empty($_COOKIE['log']) OR !isset($_COOKIE['mdp']) OR empty($_COOKIE['mdp'])){
	$msg = "<script language=\"JavaScript\">";
	$msg .= "alert('Cookie vide');";
	$msg .= "</script>";
	echo $msg;
	if (setcookie ('log',$email,time()+60*60*24*30*12)) {
		$msg = "<script language=\"JavaScript\">";
		$msg .= "alert('Cookie OK');";
		$msg .= "</script>";
		echo $msg;
		}
	setcookie ('mdp',$mdp_code,time()+60*60*24*30*12);
}


J'ai mon alerte "Cookie vide", mais absolument pas mon alerte "Cookie OK", et encore moins le cookie, évidemment.... ni l'un, ni l'autre, d'ailleurs


Avez-vous une idée ???

Merci d'avance Smiley biggrin