Probleme setcookie et header(location)

Recif
WRInaute impliqué
WRInaute impliqué
 
Messages: 816
Inscription: 25 Aoû 2004

Probleme setcookie et header(location)

Message le Mer Mar 10, 2010 11:17

Bonjour,

J'ai un problème duquel je n'arrive pas à me dépêtrer... :(

J'aimerais faire une détection de cookie au chargement de la page pour rediriger le visiteur ou pas en fonction de ce dernier. Malheureusment je suis obligé de cliquer deux fois sur le lien pour le cookie prenne effet. La redirection header(location: n'a pas l'air de prendre le cookie en compte la première fois...

Code: Tout sélectionner
if ($iPhone == true || $WinMob == true) {
   setcookie('iphone', '1', (time() + 62208000),'/');
}
if ($op == "noiphone") {
   setcookie('iphone', '0', (time() + 62208000),'/');
}
if ($op == "iphone") {
   setcookie('iphone', '1', (time() + 62208000),'/');
}

if ($_COOKIE['iphone'] == 1) {
   header("location:iphone_index.php");
}


En gros je détecte si le device est un iphone et si oui, je el redirige sur une page spéciale. Mais l'utilisateur peut choisir de voir le site original en cliquant sur un lien index.php?op=noiphone
Mais quand je clique sur le lien, la page d'origine réapparait. Il faut que je rafraichisse une fois ou que je reclique sur le lien pour que le cookie soit validé par le navigateur... Comment puis-je valider ce cookie directement en une fois?...

merci

Ukri
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 26
Inscription: 6 Sep 2009

Re: Probleme setcookie et header(location)

Message le Mer Mar 10, 2010 11:23

Les cookies enregistrés sur une page deviennent disponibles sur la prochaine page chargée

avec ça normalement ça ira :
Code: Tout sélectionner
if ($iPhone == true || $WinMob == true) {
   setcookie('iphone', '1', (time() + 62208000),'/');
   header("location:iphone_index.php");
}
if ($op == "noiphone") {
   setcookie('iphone', '0', (time() + 62208000),'/');
}
if ($op == "iphone") {
   setcookie('iphone', '1', (time() + 62208000),'/');
   header("location:iphone_index.php");
}

if ($_COOKIE['iphone'] == 1) {
   header("location:iphone_index.php");
}

Recif
WRInaute impliqué
WRInaute impliqué
 
Messages: 816
Inscription: 25 Aoû 2004

Re: Probleme setcookie et header(location)

Message le Mer Mar 10, 2010 11:34

Merci.

Mais marche pas... La première détection se passe bien mais quand je clique sur le lien index2.php?op=noiphone, il revient toujours à index_iphone.php

J'ai trouvé une solution alternative, mais pas très propre :

Code: Tout sélectionner
if (($iPhone == true || $WinMob == true) && $_COOKIE['iphone'] == "") {
   setcookie('iphone', '1', (time() + 62208000),'/');
   echo "<meta http-equiv=\"refresh\" content=\"0; url=index2.php\">";
exit;
}
if ($op == "noiphone") {
   setcookie('iphone', '0', (time() + 62208000),'/');
echo "<meta http-equiv=\"refresh\" content=\"0; url=index2.php\">";
exit;
}
if ($op == "iphone" && ($iPhone == true || $WinMob == true)) {
   setcookie('iphone', '1', (time() + 62208000),'/');
   echo "<meta http-equiv=\"refresh\" content=\"0; url=index2.php\">";
exit;
}

if ($_COOKIE['iphone'] == 1) {
   header("location:iphone_index.php");
}

Ukri
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 26
Inscription: 6 Sep 2009

Re: Probleme setcookie et header(location)

Message le Mer Mar 10, 2010 11:43

oui en fait dans le test if ($op == "noiphone") tu remets le cookie à zéro, mais ça ne sera visible que sur la prochaine page... donc le cookie pour la page actuelle reste sur "1"
mets un header("location:index.php"); dans ce test...

Recif
WRInaute impliqué
WRInaute impliqué
 
Messages: 816
Inscription: 25 Aoû 2004

Re: Probleme setcookie et header(location)

Message le Mer Mar 10, 2010 11:57

Oui, j'ai déjà essayé, mais il me fait la même chose... :(


stopher
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 16
Inscription: 10 Mar 2010

Re: Probleme setcookie et header(location)

Message le Mer Mar 10, 2010 22:35

Salut ,

essaye on complétant comme ceci :

Code: Tout sélectionner
if ($iPhone == true || $WinMob == true) {
   setcookie('iphone', '1', (time() + 62208000),'/');
   header("Status: 200");
   header("Location: http://vraiurl.com/iphone_index.php");
   exit;
}


Tu ajoute en fait un code HTTP dan l'entête , et surtout , avec exit tu indique de ne pas exécuter la suite de ta page , bref tu rediriges immédiatement .

Ch.

Recif
WRInaute impliqué
WRInaute impliqué
 
Messages: 816
Inscription: 25 Aoû 2004

Re: Probleme setcookie et header(location)

Message le Jeu Mar 11, 2010 7:57

Bonjour Stopher,

Finalement j'ai opté pour le meta refresh... Et j'ai déjà mis en prod, donc j'ose pas trop faire des modifs maintenant... :-( Désolé...
Merci


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité