Redirection vers lien sécurisé

ViPHP
xTG
ViPHP | 7331 Messages

24 janv. 2012, 16:05

index2.php ligne 38 il y a quoi ? Car c'est ce qui semble empêcher le session_start() manquant de fonctionner.

A savoir qu'un session_start() doit être la première chose apparaissant dans un script.
Donc si tu fais des includes il faut que le script qui n'est inclu de personne ai comme première ligne un session_start() (et les autres n'en auront pas besoin).

Eléphanteau du PHP | 24 Messages

24 janv. 2012, 19:59

Justement j'ai vérifié cette fameuse ligne 38 dans ma page index2.php :

Elle ne contient que du code HTML :

<table width="800" height="835" border="0" align="center" cellpadding="0" cellspacing="0" background="Images/picture.jpg">

Un vrai casse tête ce truc...

En fait pour te schématiser le truc :

- J'ai une page index.php pour les visiteurs.

- Si log + pass ok ---> index2.php pour membres donc.

- index2.php a un include pour que la page par défaut s'affichant à l’intérieur soit Profil.php. L'accès aux autres pages se fait toujours via un include sur index2.php et je n'est aucun problème, j'accède à toutes les autres pages sécurisées sans déconnexion.

- Cette page Profil.php appelle un script (pour l'envoi d' e-mail) se trouvant sur envoiProfil.php.

- J'accède à cette page en restant connecté mais dès que je valide l'envoi du mail, le mail part et arrive bien à destination mais je suis redirigé ensuite sur la page index.php me demandant de m'authentifier...

:shock:

Eléphanteau du PHP | 24 Messages

24 janv. 2012, 20:22

Je viens de faire une autre test :

si je mets un liens sécurisé sur la page Profil.php (celle qui appelle envoiProfil.php) du genre :

<a href="http://xxxxx.fr/index2.php?page=testl&i ... '">test</a>

Je suis bien renvoyé sur ma page test.php tout en gardant l'authentification.

Sur la page Profil et test je n'ai ni :
<?php session_start(); ?>
ni :
<?php var_dump($_SESSION);?>

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

24 janv. 2012, 20:49

Euh... personnellement je t'ai un peu perdu... En gros, sur les pages où tu veux utiliser ta session il faut :
- faire un session_start() pour démarrer la session avant d'utiliser $_SESSION
- qu'aucun code html ne soit envoyé au navigateur avant le session_start(). C'est à dire que comme pour les header, il ne doit pas y avoir de code html, de saut de ligne ou d'espace entre le début de ton script et le premier <?php, et il ne doit pas y avoir d'echo, de print ou autre affichage entre le premier <?php et le session_start() (ça veut dire aussi : pas d'include de fichier qui font des echo ou affichent quelque chose à l'écran)
- et euh... ben c'est tout.

Si tu fais ça sur ta page, tu dois pouvoir récupérer la valeur présente en session et l'utiliser dans ta redirection :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 24 Messages

24 janv. 2012, 22:51

Donc, j'ai ajouté un
<? echo ($id); ?>
sur ma page profil.php afin de vérifier que a partir de la mon id était encore en mémoire...et c'est bien le cas il l'est !

Donc j'ai bien mon id en mémoire quand je suis sur la page profil.php (cette même page qui appelle le fichier envoiProfil.php)


LE PROBLÈME VIENT DONC DU FICHIER CONTENANT LE SCRIPT D'ENVOI EMAIL SUIVANT :

EnvoiProfil.php :
<?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/index2.php?page=Profil&id=$id");  

//L'ID N'EST PAS RETRANSCRIT DU COUP LA REDIRECTION RATE ET JE ME RETROUVE SUR MA PAGE D'ERREUR AVEC DEMANDE DE LOG....

?> 
Ma question : Comment récupérer mon ID dans la page envoiProfil.php ?? J'ai testé TOUTES vos solutions...sans succès !

Merci encore de votre aide ;)

ViPHP
xTG
ViPHP | 7331 Messages

25 janv. 2012, 10:02

Bah oui sauf que là ton $id il vient d'où ? De nulle part...
S'il est dans l'url => $_GET['id']
S'il provient d'un formulaire en POST => $_POST['id']
S'il provient d'une session => $_SESSION['id']
Mais certainement pas $id ;)

Mammouth du PHP | 568 Messages

25 janv. 2012, 10:39

Je pense que tu devrais revoir le fonctionnement des sessions et SURTOUT essayer de l'appliquer dans ton système.

Je constate que tu a une page index.php et une autre page index2.php qui sont l'équivalent de bootstrap (point d'entrée) auquel tu passe des paramètres comme la page à inclure (Profil), si c'est bien le cas, cela ne sert à rien de mettre des sessions_start dans toutes tes pages incluses, seul tes pages index & index2 doivent contenir cette directive.

Afin de tester correctement, je te propose de tester de la façon suivante.

Tu initialise ta sesssion dans index.php
session_start();

$_SESSION['id'] = 'test';

//ici tous tes traitements + include
Tu créé deux autres pages à inclure, test1.php & test2.php

PAGE test1
print_r($_SESSION); //ici tu doit avoir un tableau contenant test 

//création d'un lien vers test2
echo '<a href="index.php?page=test2"></a>'
PAGE test2
print_r($_SESSION); //ici tu doit avoir un tableau contenant test 
Maintenant tu accède à index.php?page=test1

Eléphanteau du PHP | 24 Messages

25 janv. 2012, 16:28

Bah oui sauf que là ton $id il vient d'où ? De nulle part...
Mon $id à la base vient de l'index.php dans laquelle se trouve ma zone de login...
Ensuite l'id circule via l'url :

http://xxxxx.fr/index2.php?page=Profil& ... j37rzwrhku[/b]

Eléphanteau du PHP | 24 Messages

25 janv. 2012, 16:37

Je pense que tu devrais revoir le fonctionnement des sessions et SURTOUT essayer de l'appliquer dans ton système.

Je constate que tu a une page index.php et une autre page index2.php qui sont l'équivalent de bootstrap (point d'entrée) auquel tu passe des paramètres comme la page à inclure (Profil)
En effet ma page index.php et la page "tout public" avec la zone de login.
Si login Ok je suis renvoyé sur la page index2.php qui inclut dans son URL l'ID.

ex : http://xxxxx.fr/index2.php?id=t8qefbzvutopnaxf7hme

J'ai donc suivis tes conseils :

- J'ai initialisé ma session sur Index.php
- J'ai crée mes pages test1.php et test2.php
- Sur index j'ai donc un liens qui inclut la page test1.php dans index.php ---> ma page s'affiche avec un Array ( [id] => test ) et rien d'autre ! Le liens vers test2.php n'apparait pas... #-o
- Si je fais un liens direct vers test2.php depuis index.php ---> ma page s'affiche avec un Array ( [id] => test )
cela ne sert à rien de mettre des sessions_start dans toutes tes pages incluses, seul tes pages index & index2 doivent contenir cette directive.
A la base je n'ai cette directive sur AUCUNE de mes pages ni les index ni les pages inclues...et pourtant mes sessions fonctionnent parfaitement...normal ou pas ?

ViPHP
xTG
ViPHP | 7331 Messages

25 janv. 2012, 16:51

C'est parce que ce que tu appelles session ce n'est pas le système de session de PHP.
Et ça on ne l'avait pas compris...

Donc quand tu veux utiliser l'ID il faut utiliser $_GET['id'] dans ton cas.
Sachant que tu es obligé de l'inclure dans toutes tes url pour ne pas le perdre...

Mammouth du PHP | 568 Messages

25 janv. 2012, 17:24

Tu ne voit pas le lien parce que j'ai omis de mettre du texte dans la balise <a> (désolé)

Et effectivement pour récupérer un id passé en GET, il te faut récupérer par la variable globale $_GET

Donc, pour faire le point, tu initialize ta session dans index.php (par exemple), tu appel la page test1.php et tu clic sur le lien "Lien de test"

PAGE test1
print_r($_SESSION); //ici tu doit avoir un tableau contenant test

//création d'un lien vers test2 + passage de l'id en GET
echo '<a href="index.php?page=test2&id='.$_SESSION['id'].'">Lien de test</a>';
PAGE test2
print_r($_SESSION); //ici tu doit avoir un tableau contenant test => juste pour le test

//ce qui t'intéresse c'est de récupérer l'id de l'url
//donc tu test id

if(!empty($_GET['id'])) {
echo $_GET['id'];
}
Une fois que tout est ok, tu pourra remplacer par des redirections (penser à enlever tous caractères avant la redirection => même un espace entrainera une erreur)

Eléphanteau du PHP | 24 Messages

25 janv. 2012, 18:20

Désolé c'est moi qui fais mon boulet et je copie ton code sans voir qu'il manque le texte du liens...ça j'ai corrigé !

Sinon j'ai fais ce que tu m'a demandé et ça marche ! L'id transit bien d'une page à l'autre !

Et donc au final j'ai besoin d'appliquer cela à mon script d'envoi d'email :
<?php session_start();  // J'ai juste ajouté ceci car avec mes pages test1 et test2 la start session a suffit à recup mon ID

$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/index2.php?page=Profil&id='.$_SESSION['id'].'");   // La il y a une erreur de syntaxe !!

?> 
En fait mon problème initiale était celui la : mettre en forme la redirection avec un "header Location"...

Eléphanteau du PHP | 24 Messages

25 janv. 2012, 19:00

J'ai ajouté un :
$id = $_SESSION['id'];
puis
header("Location: http://xxxxx.fr/index2.php?page=Profil&id=$id");

Ça a marché...5 mins...la a nouveau il me redemande l'authentification ! C'est un truc de dingue mdr !

Eléphanteau du PHP | 24 Messages

01 févr. 2012, 03:15

Bonsoir, je me permet un petit UP car mon problème n'est toujours pas résolu... :oops: :? :/


Est-il normal qu'avec ce code dans mon "Header Location" mon ID ne soit pas recup ou tout du moins que ma redirection en fonctionne pas...

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

Merci d'avance

Mammouth du PHP | 568 Messages

01 févr. 2012, 11:09

Non pas normal.

Mais je te conseille vivement de passer par des sessions pour gérer tous ce qui a attrait au profil utilisateur.

Schéma,

le user se connecte => tu stock les informations nécessaires en SESSION => tu redirige vers n'importe quel page et tu peux récupérer toutes les infos

L'avantage c'est que cela évitera à un user de taper directement l'adresse du profil d'un autre utilisateur (tu me suis ?).