IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

session_start() et session_regenerate_id()


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut session_start() et session_regenerate_id()
    Bonjour à tous,
    J'ai un petit probleme de header pour pas changer quand je boss sur les sessions....
    Alors j'utilise les sessions dans le cadre d'un panier pour e-commerce que je suis en train de developpez.
    La page qui me pose probléme est la page de login client.

    D'abord l'erreur
    Warning: session_regenerate_id() [function.session-regenerate-id]: Cannot regenerate session id - headers already sent in /homepages/7/d203016977/htdocs/dev/vitrine/vitrine/inc_session.php on line 10
    Ensuite le code de la section sur le script session
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function openSession($userid) {
    // Connexion à MySQL
    	mysql_connect("", "", "");
    	mysql_select_db("");
    // On supprime la session en cours
    	mysql_query("DELETE FROM site_session WHERE userid = $userid");
    // Re-génération du sid
    	session_regenerate_id();
    // On insère le nouvel id de session dans la db
    	mysql_query("INSERT INTO site_session (sid, userid, ip, browser) VALUES ('".session_id()."', '$userid', '123.3.3.2', 'IE6')");
    	$_SESSION['userid']=$userid;
    	return TRUE;
    }
    et maintenant le code de la page login.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    session_start();
    require_once 'inc_session.php';
    if (isset ($_SESSION['userid']))
    {
    openSession($_SESSION['userid']);
    $view = 'bonjour et bienvenue';
    }
    else
    {
    $view ='<form action="login.php" method="post" name="login" target="_self">';
    $view .='<input name="username" type="text" value="Votre login" size="10" />';
    $view .='<input name="password" type="text" value="Votre mdp" size="10" />';
    $view .='<input name="action" type="hidden" value="login" />';
    $view .='<input name="login" type="submit" value="Vous connectez" />';
    $view .='</form>';
    }
    if ($_POST['action'] == login)
    {
     
    	if (empty($_POST['username']) && $_POST['password']) 
    		{
    		echo "erreur d'identification, veuillez recommencer";
    		}
    	else 
    		{
    		loginCheck($_POST['username'],$_POST['password']);
    		}
    }
     
    ?>
    Voilà je cherche un peu partout mais je ne vois pas comment ne pas faire un session_start en début de mon script login.php étant donné que je test les variables de sessions.

    En fait pour bien comprendre, lorsqu'un client se promène et fait des achats sur le site, une session et un caddie temporaire sont créer, à la fin de ses achats il a le choix de s'identifier si il dispose déjà d'un compte soit de s'en créer un.
    C'est pour cela qu'il y a un test sur la page login pour savoir si le client possède déjà une session temporaire et un panier afin de pouvoir les enregistrer par la suite dans sa nouvelle session identifié.

    Merci de toute aide qui pourra me permettre d'avancer ^^
    Merci pour l'edit c'est plus propre - Je ne vous ai pas mis tout le code du script session car apres c'est juste la fonction qui test si le couple username et password sont correct.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    je ne vois pas comment ne pas faire un session_start en début de mon script
    Le session_regenerate_id(); peut se faire apres le session_start();
    Il n'y a rien entre les deux qui pourrait expliquer que les en-têtes soient déjà traitées ?

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Y'a t'il une incidence si les entêtes html sont encore présent à la suite du script? dans l'ordre logique le serveur va d'abord exécuter le script et ensuite lire le html vu que le script est avant le code HTML? J'ai laissé les entêtes html pour pouvoir faire valider ma page, sinon il me causé sans cesse l'erreur sur le W3C
    Sinon je ne génère le header nul par ailleurs, je fais juste appel à session_start puis après session-regenerate-id.

  4. #4
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    cela ne viens pas des balises HTML que tu as après.

    Par contre, cela peut venir de caractères parasites dans ton fichier inc_session.php. Vérifies que tu n'as pas d'espace avant <?php et ne ferme pas la balise php (cela évite de se retrouver avec des espaces ou des retours à la ligne à la fin du fichier )

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    J'ai bien vérifié, je n'ai pas d'espace avant l'ouverture de ma balise php, j'ai également supprimé la balise de fin ?> mais le problème persiste.

    Je comprends pas, quand je testais en local je n'avais pas de problème, dés que je suis passé sur le live ça l'a fait, pourtant j'ai pas de restrictions sur l'affichage des erreurs sur mon serveur de dev.

    Bon faut dire que j'étais parti avec la fonction PDO mais elle n'est pas prise en charge correctement sur mon hébergement, donc j'ai du recoder à la va vite avec les connections classiques à Mysql, j'ai peut être fait une erreur du coup en modifiant le code, mais je ne vois vraiment pas ou....

Discussions similaires

  1. session_start() + frame = ?
    Par dev7 dans le forum Langage
    Réponses: 4
    Dernier message: 20/12/2005, 12h44
  2. problème avec session_start()
    Par hanane_iaai dans le forum Langage
    Réponses: 1
    Dernier message: 12/12/2005, 18h46
  3. Problème de session_start
    Par BARBIER dans le forum Langage
    Réponses: 18
    Dernier message: 08/12/2005, 15h29
  4. header('Location:$url') VS session_start()
    Par Paniez dans le forum Langage
    Réponses: 2
    Dernier message: 02/12/2005, 23h30
  5. [Sécurité] utilisation de session_start()
    Par ibtisss dans le forum Langage
    Réponses: 3
    Dernier message: 23/09/2005, 19h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo