Sessions PHP

TuxPPC

Membre confirmé
16 Avril 2003
39
1
42
Colomiers
Bonjour,

J'ai fait deux scripts php qui me permettent de gérer une session utilisateur.
Quand j'entre mon identifiant et mot de passe j'ouvre une session et quand
je clique sur le bouton "se déconnecter" il me déconnecte.
J'ai fait les tests de fonctionnement des scripts aussi bien sur m$ que sur unix like.
La connexion / deconnexion se fait sans problème en local.
Si je fait les tests depuis le server internet en passant par le web j'ai ces messages d'erreurs :

Notice: A session had already been started - ignoring session_start() in /PATH/logout.php on line 7

Warning: Cannot modify header information - headers already sent by (output started at /PATH/logout.php:7) in /PATH/logout.php on line 19
la ligne 7:

// ouverture d'un session
session_start();

la ligne 19 :
// redirection vers la page d'accueil
header('location: login_form.php') ;

Merci pour votre aide,
je suis assez déboussolé d'avoir ce bug.

TuxPPC
 
@ybee a dit:
Un petit up parce que je viens de réaliser le même genre de connexion pour une interface d'admin d'un site, mais je n'ai pas encore réussi à faire un truc, donc petite question:

Comment définir un temps de session max si l'utilisateur ne se déconnecte pas lui-même ?

Merci !!

Une session n'est valable jusqu'à la fermeture du navigateur il me semble...

Par contre si tu veux un temps maximum tu peux utiliser un cookie pour le faire...



Marc-André
 
TuxPPC a dit:
Bonjour,

J'ai fait deux scripts php qui me permettent de gérer une session utilisateur.
Quand j'entre mon identifiant et mot de passe j'ouvre une session et quand
je clique sur le bouton "se déconnecter" il me déconnecte.
J'ai fait les tests de fonctionnement des scripts aussi bien sur m$ que sur unix like.
La connexion / deconnexion se fait sans problème en local.
Si je fait les tests depuis le server internet en passant par le web j'ai ces messages d'erreurs :

Notice: A session had already been started - ignoring session_start() in /PATH/logout.php on line 7

Warning: Cannot modify header information - headers already sent by (output started at /PATH/logout.php:7) in /PATH/logout.php on line 19
la ligne 7:

// ouverture d'un session
session_start();

la ligne 19 :
// redirection vers la page d'accueil
header('location: login_form.php') ;

Merci pour votre aide,
je suis assez déboussolé d'avoir ce bug.

TuxPPC

oublie la balise meta c'est pas DU TOUT adapté

tu peux tout a fait envoyé session_start et header dans la foulée... c'est 2 erreures qui n'ont rien à voir.

session_start(); doit impérativement être à la première ligne de ton document ... il ne doit rien y avoir avant <?php session_start();
tu dois avoir 2 sessions_start() dans la mm page...

de même pour ton header, il ne doit y avoir absolument aucune information de description de page avant. car c'est là que se produit le double envoi.
ca implique aucun echo, et aucun code html

donc dans l'absolu ta page doit ressemblé à ce shéma :

Bloc de code:
<?php session_start();
//un tas de truc et de boucles php

header("Location:login_form.php");

//eventuellement du code PHP
?>
<!DOCTYPE--ton doctype ici >
<html>
<head></head>
<body></body>
</html>
bien entendu dans le code HTML tu peux rajouter tout le php dont tu as besoins

de plus pour securiser l'acces au pages d'admin, en fait eviter qu'un utilisateur lambda ne tombe dessus par hasard
je te conselle de faire un :

session_register(nom_de_la_variable_de_login);

ainsi au debut de chaque page d'admin tu mets :
Bloc de code:
<? session_start(); //demarrage de la session
$nom_admin = $_SESSION[nom];
if (!isset($nom_admin)) { //si la variable de session n'est pas renseigné
            header("Location:login.php");//redirection vers la page de login
            exit();//sortie du script
        }

// en tas de code PHP
?>
tu bourres ca dans une fonction et ainsi ... si il n'y a pas eu de cookie generer lors de la session_start
l'utilisateur sera automatiquement rerouter vers la page de login ...
 
Captain_X a dit:
session_start(); doit impérativement être à la première ligne de ton document ... il ne doit rien y avoir avant <?php session_start();

chez moi ça marche avec des require et l'initialisation des variables avant le session_start(),
d'ailleur si je mets l'initialisation des variables apres ça a tendance a planter...
 
Captain_X a dit:
zarbi... ceci dit j'ai plutot tendance à utiliser include que require ... question de fiabliité non justifié et purement subjective

je crois que le require est recommandé quand le script appelé est necessaire au fonctionnement de l'application puisqu'il produit une erreur fatale.
alors que l'on recommande généralement d'utiliser include quand le script n'est pas nécessaire, quand l'appli peut s'en passer quoi... (mais du coup il faut créer des alternatives...)
enfin c'est ce qu'on m'a dit... (mes profs)

enfin bon c'est du hors-sujet... sorry...
 
oué possible ... moi je fait que des includes ca me parait plus logique, ainsi ca imbrique d'emblée la page appelée. tout comme il me parait logique que l'ouverture de session soit tout en haut de la page.

au final tant que ca marche et que c'est clair