Redirection vers lien sécurisé

Eléphanteau du PHP | 24 Messages

23 janv. 2012, 02:49

Bonsoir,

voici un autre problème concernant mes sessions sécurisées, je m'explique :

- Un client s'authentifie sur mon site et se voit attribuer un ID.
- Il accède donc à son espace personnel.
- Dans cet espace perso il peut envoyer des mails à l'administrateur et après l'envoi de ce mail il doit être redirigé sur l'accueil de sa page perso (page restant donc sécurisée par ID)...

Mon problème se situe donc à ce niveau là. Comment faire pour récupérer l'ID de la session dans mon script d'envoi email ? J'ai beau chercher sur votre forum ou sur des cours sur les Sessions...je ne comprend pas...

Après la redirection je me retrouve à la page d'accueil et mon identifiant/mot de pass m'est de nouveau demandé...

Voici mon formulaire d'envoi mail :

<?php

$msg .= "Nom :\t$nom\n";
$msg .= "Prenom :\t$prenom\n";

$recipient = "[email protected]";
$subject = "MODIFICATION PROFIL";

$mailheaders = "From: admin MAILER<> \n";
$mailheaders .= "Reply-To: $email\n\n";

mail($recipient, $subject, $msg, $mailheaders);

Header("Location: http://xxxxx.fr/index.php?page=Accueil&id='.$id.'");

?>

Le mail arrive bien mais la redirection me fait perdre mon ID de session et donc l'authentification...


Merci d'avance pour votre aide et désolé si cette question est idiote mais la je sèche... :oops:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

23 janv. 2012, 09:47

salut,

Si l'id est en session utilise simplement le tableau $_SESSION pour passer ta valeur ($_SESSION['id'] ou autre).

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 24 Messages

23 janv. 2012, 13:54

J'ai donc fait ça sur mon fichier "envoiProfil.php" (appelé pour traiter l'envoi du formulaire) :

<?php

session_start();

$msg .= "nom :\t$nom\n";
$msg .= "prenom :\t$prenom\n";

$recipient = "[email protected]";
$subject = "MODIFICATION PROFIL";

$mailheaders = "From: xxxxx MAILER<> \n";
$mailheaders .= "Reply-To: $email\n\n";

mail($recipient, $subject, $msg, $mailheaders);

$id = $_SESSION['id'];

Header("Location: http://xxxxx.fr/index.php?page=Profil3&id='.$id.'");

?>

Hélas cela ne marche pas...je dois mal m'y prendre... 8-|
Modifié en dernier par Mezixx le 23 janv. 2012, 14:09, modifié 1 fois.

ViPHP
xTG
ViPHP | 7331 Messages

23 janv. 2012, 13:57

Pour utiliser le tableau $_SESSION il faut un session_start() en début de page.

Eléphanteau du PHP | 24 Messages

23 janv. 2012, 14:09

Oui oui autant pour moi !

J'avais bien mis le session_start(); en début de page juste après mon <?php ...

Mais mon id de session (session active au moment où l'utilisateur accède au formulaire sécurisé) n'est apparemment pas récupéré et je ne suis plus authentifié après la redirection !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 janv. 2012, 16:20

Merci d'utiliser les balises
 pour mettre en forme tes messages... d'autant plus que cela te permettrait de repérer certaines erreurs grâce à la coloration syntaxique :)

En l'occurrence, l'id que tu transmet en get n'est pas correct... il faut soit délimiter ta chaines avec des guillemets, soit avec des apostrophes, mais faut rester cohérent :
[php]header("Location: http://xxxxx.fr/index.php?page=Profil3&id=" . $id);
devrait déjà mieux fonctionner :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 24 Messages

23 janv. 2012, 16:47

Merci pour ta réponse et désolé pour mes post qui ne respectent pas la "charte"

Donc j'ai testé ta solution mais hélas toujours le même problème, je ne suis plus authentifié après la redirection et l'URL affichée est :
http://xxxxx.fr/index.php?page=Profil3&id=
Il manque donc mon ID . Je me demande si il est bien récupéré...

Mammouth du PHP | 568 Messages

23 janv. 2012, 17:54

Merci d'utiliser les balises
 pour mettre en forme tes messages... d'autant plus que cela te permettrait de repérer certaines erreurs grâce à la coloration syntaxique :)

En l'occurrence, l'id que tu transmet en get n'est pas correct... il faut soit délimiter ta chaines avec des guillemets, soit avec des apostrophes, mais faut rester cohérent :
[php]header("Location: http://xxxxx.fr/index.php?page=Profil3&id=" . $id);
devrait déjà mieux fonctionner :)
Vérifie ta SESSION juste avant de rediriger.

Si celle-ci est vide, c'est soit que tu ne l’initialise pas (ou mal) soit que tu l'écrase quelque part.

Eléphanteau du PHP | 24 Messages

23 janv. 2012, 18:49

Alors je viens de vérifier le contenu de ma SESSION.

Sur ma page faisant appel à fichier "envoiProfil.php" la session est bien en mémoire...

Par contre impossible de faire la vérification (par un echo par exemple) sur la page "envoiProfil.php"...

Pour rappel ma page "envoiProfil.php" contient ceci :
<?php
	 
session_start();      //Ajouté suite aux conseils

$msg .= "nom :\t$nom\n";
$msg .= "prenom :\t$prenom\n";

$recipient = "[email protected]";
$subject = "MODIFICATION PROFIL";

$mailheaders = "From: xxxxx MAILER<> \n";
$mailheaders .= "Reply-To: $email\n\n";

mail($recipient, $subject, $msg, $mailheaders);

$id = $_SESSION['id'];       //Ajouté suite aux conseils

header("Location: http://xxxxx.fr/index.php?page=Profil3&id=". $id);

?> 

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 janv. 2012, 20:54

Et euh... y a bien un moment dans ton code (au login où ailleurs), où tu stockes ton id dans ta session ?
(avec un sessiont_start() et un $_SESSION['id'] = qqchose ?)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 24 Messages

23 janv. 2012, 23:58

Oui au login...mais je ne comprend pas au tu veux en venir ?

ViPHP
xTG
ViPHP | 7331 Messages

24 janv. 2012, 09:55

Ajoutes ceci sur ta page appelant ton script et sur envoiProfil.php
var_dump($_SESSION);

Eléphanteau du PHP | 24 Messages

24 janv. 2012, 14:13

<?php var_dump($_SESSION);?>
Cela affiche un "NULL" sur ma page Profil, celle appelant "envoiProfil.php"

et un :

NULL
Warning: Cannot modify header information - headers already sent by (output started at /mnt/162/sdb/7/c/Scripts/envoiProfil.php:3) in /mnt/162/sdb/7/c/Scripts/envoiProfil.php on line 25

Après validation du formulaire...

PS : ligne 25 de envoiProfil.php : header("Location: http://xxxxx.fr/index.php?page=Profil&id=". $id);

ViPHP
xTG
ViPHP | 7331 Messages

24 janv. 2012, 14:30

Si tu as NULL c'est que la session n'est pas démarrée...
Donc tu n'as pas de session_start() car même si aucune variable il devrait te retourner un array vide.
Ou bien la session n'est pas gardée d'une page à une autre, les cookies sont-ils activés sur ton navigateur ?

N.B : pour l'erreur cela vient du var_dump() que je t'ai fait ajouter, c'est normal.

Eléphanteau du PHP | 24 Messages

24 janv. 2012, 15:09

Merci de ton aide !

Alors oui les cookie sont activés, je n'ai pas de problème avec les autres pages sécurisées de mon site dans le sens ou une fois connecté je peux naviguer sur ces pages privées sans avoir à me relogger.

Sinon concernant ton code, j'ai ajouté sur ma page Profil.php et envoiProfil.php un session_start(); et un var_dump($_SESSION);

***Cela me donne sur la page Profil.php :

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/162/sdb/7/c/index2.php:38) in /mnt/162/sdb/7/c/Profil.php on line 2
array(0) { }

---> ligne 2 : session_start();


***Cela me donne sur la page envoiProfil.php :

array(0) { }
Warning: Cannot modify header information - headers already sent by (output started at /mnt/162/sdb/7/c/Scripts/envoiProfil.php:3) in /mnt/162/sdb/7/c/Scripts/envoiProfil.php on line 26

---> ligne 26 : header("Location: http://xxxxx.fr/index2.php?page=Profil&id=". $id);