header location

header location - PHP - Programmation

Marsh Posté le 06-02-2009 à 12:22:41    

Bonjour à tous,
 
J'utilise un script php pour vérifier l'autorisation d'accès à certaines pages. Supposons par exemple que l'internaute arrive sur page1.php, un script vérifie si une variable de session donnée existe et dans la négative envoie vers connexion.php
Dans connexion.php se trouve la ligne

Code :
  1. header('Location: page1.php');


Cela fonctionne bien mais je souhaiterais que page2.php puis page3.php etc. agissent de même ce qui fait qu'il faudrait que le code ne comprenne pas

Code :
  1. header('Location: page1.php');

mais plutot

Code :
  1. header('Location: quelque chose qui renvoie vers la page appelante quelque soit la page appelante');

J'ai beau avoir cherché dans les messages existants, j'avoue ne pas savoir comment faire.
 
Une âme charitable accepterait-elle de se pencher sur mon problème ? Merci d'avance.
 
tete278

Reply

Marsh Posté le 06-02-2009 à 12:22:41   

Reply

Marsh Posté le 06-02-2009 à 12:30:26    

Code :
  1. header('location:'.$_SERVER["HTTP_REFERER"]);

Reply

Marsh Posté le 06-02-2009 à 13:25:35    

Bonjour soulmanto et merci pour ta réponse rapide.
Je viens de tester ta proposition et cette fois connexion.php renvoie à elle-même alors que je souhaiterais qu'elle renvoie vers page1.php si c'est à partir d'elle que j'ai accèdé à connexion.php
 
Aurais-tu une autre piste ?
Merci  
tete278

Reply

Marsh Posté le 06-02-2009 à 13:45:00    

Connexion renvoi à elle même car tu dois avoir mis un formulaire dessus et donc le REFERER deviens connexion lui même.
Stock le referer lors de l'arrivée sur connexion.php et redirige dessus après soumission du form...
Attention au referer vide, prevoi un destination par defaut.

Reply

Marsh Posté le 06-02-2009 à 15:32:40    

Bonjour à tous et merci à yellu,
 
Soyons clair : voici le début du script de la page connexion :

Code :
  1. <?php
  2. // on teste si le visiteur a soumis le formulaire de connexion   
  3. if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
  4.    if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass'])))
  5.     {
  6.   // Connexion à la base de données comprenant les utilisateurs autorisés
  7.   include "../mysql_conf.incent.php";
  8.   $bas=mysql_connect($host,$login,$password) or die ('Erreur :'.mysql_error() );
  9.   $base = mysql_select_db('mfrforetent',$bas);
  10.  // on teste si une entrée de la base contient ce couple login / pass
  11.   $sql = 'SELECT count(*) FROM user_id WHERE _ident="'.mysql_escape_string($_POST['login']).'" AND _passwd="'.mysql_escape_string($_POST['pass']).'"';
  12.   $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
  13.       $data = mysql_fetch_array($req);
  14.   mysql_free_result($req);
  15.  // On passe en session le contenu de ID (celui de l'utilisateur)
  16.   $sql = 'SELECT * FROM user_id WHERE _ident="'.mysql_escape_string($_POST['login']).'" AND _passwd="'.mysql_escape_string($_POST['pass']).'"';
  17.   $res =mysql_query($sql) or die ('Erreur :'.mysql_errno().mysql_error());
  18.   $rows = mysql_num_rows($res);
  19.   while ($rows=mysql_fetch_array($res))
  20.    {
  21.    $id_utilisateur = $rows['_ID'];
  22.    }
  23.       mysql_close();
  24.     if ($data[0] == 1)
  25.   {
  26.    // On obtient une réponse donc l'utilisateur est un membre
  27.           session_start();
  28.            $_SESSION['login'] = $_POST['login']; // affecte cette valeur dans la clef login du tableau de session $_SESSION
  29.    $_SESSION['id_utilisateur'] = $id_utilisateur;
  30.   // Connexion à la base de données contenant les résultats des exercices
  31.    include "../mysql_conf.inc.php";
  32.    $link=mysql_connect($host,$login,$password) or die ('Erreur :'.mysql_error() );
  33.    $base = mysql_select_db($base);
  34.           header('location:'.$_SERVER["HTTP_REFERER"]);
  35.            exit();
  36.   }


 
La ligne 41 pose problème car renvoie vers elle-même alors qu'elle devrait retourner vers la page qui l'a appelée.
Tu parles de destination par defaut et je ne souhaite pas que cette destination soit identique à chaque fois donc je ne comprends pas ce qu'il faut faire.
 
Merci  
tete278


Message édité par tete278 le 06-02-2009 à 15:36:40
Reply

Marsh Posté le 06-02-2009 à 15:41:41    

Le truc c'est que $_SERVER["HTTP_REFERER"] n'est pas fillable. Parfois il est vide, et c'est balot.
La seule solution que j'ai trouvé pour faire ce genre de truc est de faire passer l'url courante en get/post/session selon le cas.

Reply

Marsh Posté le 06-02-2009 à 15:56:42    

+1, je met un paramètre dans l'URL. Je n'autorise dedans juste des URL relatives au domaines, pour éviter de pouvoir rediriger n'importe où

Message cité 1 fois
Message édité par FlorentG le 06-02-2009 à 15:58:27
Reply

Marsh Posté le 06-02-2009 à 16:20:37    

Le REFERER est la page qui précede la page actuelle, qd on soumet un formulaire alors la page précédente deviens celle du formulaire.
C'est pour ça que tu es redirigé sur le Connexion !
 
Je te dis donc de stocker ton information REFERER au moment ou elle est valide (la première fois que tu arrives sur Connexion) ou encore de passer par une variable GET ou POST pour la spécifier à Connexion comme le propose les deux autres personnes qui t'ont répondu.


Message édité par yellu le 06-02-2009 à 16:21:22
Reply

Marsh Posté le 07-02-2009 à 12:51:06    

FlorentG a écrit :

+1, je met un paramètre dans l'URL. Je n'autorise dedans juste des URL relatives au domaines, pour éviter de pouvoir rediriger n'importe où


avec file_exists ? EDIT ah ben non  [:haha klemton]


Message édité par Profil supprimé le 07-02-2009 à 12:51:44
Reply

Marsh Posté le 10-02-2009 à 08:10:54    

Bonjour à tous et merci pour vos interventions. Je viens de tester la proposition de Corten en créant dans page1.php une variable de session mémorisant l'url de la page en cours

Code :
  1. $_SESSION['url'] = $_SERVER['REQUEST_URI'];

et ai modifié dans connexion.php ma ligne 41 qui devient  

Code :
  1. header('Location: $_SESSION[\'URL\']');


Après m'être loggué, j'aboutis à une erreur 404 donc je ne suis pas redirigé au bon endroit. Etant assez débutant, je ne vois pas où est mon erreur car erreur il y a. Merci d'avance.
 
tete278

Reply

Marsh Posté le 10-02-2009 à 08:10:54   

Reply

Marsh Posté le 10-02-2009 à 08:38:48    

Les variables ne sont pas interprétées entre guillemets simples...

Reply

Marsh Posté le 10-02-2009 à 13:29:32    

Plutôt : header('Location: '.$_SESSION['URL']);


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 10-02-2009 à 13:30:47    

ou bien plus lisible :

Code :
  1. header("location: {$_SESSION['url']}" );

Reply

Marsh Posté le 10-02-2009 à 14:51:44    


Ce qui est moins lisible pour beaucoup de développeurs. ;)

Reply

Marsh Posté le 10-02-2009 à 14:53:12    

c'est vrai, çà dépend en partie de la colorisation syntaxique de l'éditeur de code, mais pour moi c'est plus lisible ;)

Reply

Marsh Posté le 11-02-2009 à 12:07:52    

Bonjour à tous et merci pour vos participations,
 
J'ai donc, dans connexion.php, modifié ma ligne ainsi

Code :
  1. header("location: {$_SESSION['url']}" );

et obtiens désormais l'erreur suivante :
Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'toto'@'10.0.70.3' (using password: YES) in /homez.65/site/www/connexion.php on line 9
Erreur :Access denied for user 'toto'@'10.0.70.3' (using password: YES)
 
J'en déduis que les paramètres de connexion à la base de données ne sont pas bons; est-ce que je me trompe ?
Je pose la question dans le sens où ils me semblaient pourtant être corrects ....
 
Merci encore
 
tete278

Reply

Marsh Posté le 11-02-2009 à 12:09:10    

et ben apparemment, non, ils ne sont pas bons... ;)

Reply

Marsh Posté le 12-02-2009 à 17:23:02    

Bizarre, bizarre, vous avez dit bizarre ? Comme c'est bizarre.
 
En faisant page précédente 2 fois, j'accède pourtant à la bonne page, ce qui est fort curieux. N'y aurait-il pas une autre possibilité qu'une erreur de paramètres ?
 
tete278


Message édité par tete278 le 12-02-2009 à 17:40:16
Reply

Marsh Posté le 12-02-2009 à 21:47:39    

Reply

Marsh Posté le 07-03-2009 à 13:50:32    

Bonjour à tous,
 
Force est de constater que vous aviez raison. Je clos par conséquent la discussion en remerciant tous les intervenants.
tete278

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed