Probleme setcookie et header(location)

WRInaute impliqué
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:
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
 
Nouveau WRInaute
Les cookies enregistrés sur une page deviennent disponibles sur la prochaine page chargée

avec ça normalement ça ira :
Code:
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");
}
 
WRInaute impliqué
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:
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");
}
 
Nouveau WRInaute
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...
 
Nouveau WRInaute
Salut ,

essaye on complétant comme ceci :

Code:
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.
 
WRInaute impliqué
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
 
Discussions similaires
Haut