Blog

samedi 19 janvier 2019

Solutions techniques

 

Information technique par Francois

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
}