Le formulaire est installé, mais la redirection ne fonctionne pas (ou redirige vers une autre page)
Parmi les raisons qui peuvent provoquer un problème lors de la redirection, il y a le changement de domaine : l’authentification sur le site se fait sur un domaine particulier (http://site.com) alors que la redirection se fait sur un autre domaine où l’authentification est perdue (http://www.site.com). Le problème peut être réglé soit en paramétrant explicitement les cookies sur un ensemble de domaines, soit en effectuant des redirections pour s’assurer que l’authentification et redirection correspondent toujours.
Il y a plusieurs solutions possibles à ce problème fréquent :
- Vous vous assurez que l’authentification a bien lieu sur le même domaine que la page de redirection (protégée).
- Il est possible de changer le domaine des cookies de session pour qu’ils prennent en compte tous les sous-domaines soit en configurant le php.ini (session.cookie_domain), soit en appelant session_set_cookie_param
(http://fr.php.net/manual/fr/function.session-set-cookie-params.php).
// A appeler avant session_start pour que les bons paramètres soient pris en compte session_set_cookie_param(0,'/','.domain.dns'); session_start();
Autre raison qui peut provoquer un problème lors de la redirection : la directive allow_url_fopen positionnée à ‘Off’. Si votre hébergeur ne souhaite pas la modifier, il existe une parade : l’utilisation de la fonction cURL() à la place de file() dans le script de protection.
$url = 'http://payment.rentabiliweb.com/checkcode.php?'; $url .= 'docId='.$docId; $url .= '&siteId='.$siteId; $url .= '&code='.$_GET['code']; $url .= "&REMOTE_ADDR=".$_SERVER['REMOTE_ADDR']; $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); curl_setopt($ch, CURLOPT_REFERER, $_SERVER['HTTP_REFERER']); curl_setopt($ch, CURLOPT_TIMEOUT, 10); // 10secondes de time out curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPGET, 1); $result = curl_exec($ch); $result = trim($result); $pos = strpos($result,'OK'); if ($pos === false) { // erreur } else{ // ok }

