begin process at 2010 02 09 00:15:34
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Général

 > 

Pourquoi mes sessions ne fonctionnent plus !!


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Pourquoi mes sessions ne fonctionnent plus !!

samedi 20 mai 2006 à 13:00:43 | Pourquoi mes sessions ne fonctionnent plus !!

arnold002

Bonjour à tous,

J'ai créé un site d'anciens élèves uniquement consultable par des utilisateurs préalablement enregistrés dans ma BDD.
Sur la page d'index, j'ai un formulaire demandant un couple login/mot de passe.
J'utilise naturellement les sessions.
Il ya quelques temps je me décide à refondre le design afin d'intégrer des CSS. Depuis, mes sessions ne fonctionnent plus du tout.
Y'a t'il un rapport ? je ne crois pas.
Je travaille en local sur phpmyadmin 2.8.0.2 et mysql 5.0.19.

Voila le code de la page d'index contenant le formulaire :

$verif_query= sprintf("SELECT * FROM lh_membre WHERE login='$login' AND pass='".md5($pass)."' AND statut='$base' AND valid='1'");
mysql_real_escape_string($login);
mysql_real_escape_string($pass);
$verif = mysql_query($verif_query, $connexion) or die(mysql_error());
$row_verif = mysql_fetch_assoc($verif);
$utilisateur = mysql_num_rows($verif);
if((strcmp($login,$row_verif['login'])==0)&&(strcmp(md5($pass),$row_verif['pass'])==0)){
  if ($utilisateur) {
 session_register("authentification");
 $_SESSION['nom']       = $row_verif['nom'];
 $_SESSION['prenom']    = $row_verif['prenom'];
 $_SESSION['login']     = $row_verif['login'];
 $_SESSION['id']        = $row_verif['id'];
 $_SESSION['email']     = $row_verif['email'];
 $_SESSION['arrivee']   = $row_verif['arrivee'];
 $_SESSION['depart']    = $row_verif['depart'];
 $_SESSION['ip']        = $_SERVER['REMOTE_ADDR'];
 $_SESSION['statut']    = $row_verif['statut'];
 $_SESSION['privilege'] = $row_verif['privilege'];
 $_SESSION['visite']    = $row_verif['visite'];
 $_SESSION['bureau']    = $row_verif['bureau'];
 $_SESSION['cp']        = $row_verif['cp'];
 $_SESSION['rue']       = $row_verif['rue'];
 $_SESSION['ville']     = $row_verif['ville'];
 $_SESSION['tel']       = $row_verif['tel'];
  
$timestamp_expire = time() + 365*24*3600;
setcookie('visite', $row_verif['visite'], $timestamp_expire); 
   
 $time = (date("H") * 60) + date("i");
 $compteur = $_SESSION['visite'] + 1;
 if($row_verif['ip'] != $_SERVER['REMOTE_ADDR']){
 $sql = mysql_query("UPDATE lh_membre SET ip='".$_SESSION['ip']."', visite='$compteur' WHERE id='".$_SESSION['id']."'");
 }
header("Location: membre/accueil.php");
 }
 else{
header("Location: index.php?erreur=login");
 }
}
}
Je rajoute en plus

if(isset($_GET['erreur']) && $_GET['erreur'] == 'logout'){
session_unset('authentification');
header("Location:index.php?erreur=delog");
}


Si l'utilisateur existe, je suis bien renvoyé vers la page membre/accueil.php sinon je reste sur index.php
Jusque là, cela fonctionne

Ensuite sur ma page d'accueil.php :

session_start();
if (session_is_registered("authentification")){
}
else{
header('Location:../index.php?erreur=logout');
}
Et là, rien n'y fait. Je peux accéder à cette page même si je ne suis pas loggué.
J'ai un lien pour me delogguer (../index?erreur=logout) qui est censé effacer les variables mais rien n'y fait.

J'ai besoin d'aide SVP.
Merci d'avance
samedi 20 mai 2006 à 14:27:13 | Re : Pourquoi mes sessions ne fonctionnent plus !!

Kysic

Membre Club
J'ai pas lu tout le code donc je sait pas si c'est là le seul problème, mais quand tu utilise un header pour protèger une page fait le toujours suivre d'un exit() sinon on peut accèder au reste de la page si on n'utilise pas un navigateur classique, de plus la commande header ne fonctionne pas si tu as déjà envoyé du texte avant (avec un echo par exemple), enfin à la place de

if (session_is_registered("authentification")){
}
else{
header('Location:../index.php?erreur=logout');
}

tu peux écrire:
if (!session_is_registered("authentification")){
 header('Location:../index.php?erreur=logout');
 exit();
}

(le ! signifie NOT)
samedi 20 mai 2006 à 16:21:16 | Re : Pourquoi mes sessions ne fonctionnent plus !!

arnold002

Merci de ta réponse.
J'ai remplacé le code, c'est plus propre.
Ca n'a pas résolu le problème de cette session qui ne se détruit pas.
Je peux toujours accéder à la page (soit disant) protégée mettre après un session_unset().
Je suis sous IE7 beta 2 et le problème existe aussi sur firefox.
Je viens de m'apercevoir en consultant le php.ini que mon hébergeur avait remplacé PHP 4 par PHP 5.1.2 (sans m'en avertir d'ailleurs)
Est ce que cela peut avoir une incidence.
J'ai cru comprendre (mais j'ai pas très bien compris) en consultant www.php.net que certaines fonctions ne devaient pas être utilisées
Attention

Si vous utilisez $_SESSION (ou $HTTP_SESSION_VARS), n'utilisez pas session_register(), session_is_registered() et session_unregister().


A vrai dire, j'y comprends plus rien. Du jour au lendemain tout part en cacahuète !
Si quelqu'un a une piste...
samedi 20 mai 2006 à 17:18:11 | Re : Pourquoi mes sessions ne fonctionnent plus !!

kankrelune

Membre Club
// mysql_real_escape_string juste pour login et dans la requete pas juste après
// perso je ne suis pas un amateur du sprintf ça alourdit le script pour un gain
// plus que discutable
//
// vu que tu sais dequels paramètre tu as besoin autant les demander
// directement à mysql ça sera plus rapide qu'avec un * sauf si tu n'est
// pas sur de la structure de ta table et quelle risque de changer
// donc... .. .
$verif = mysql_query('SELECT nom,prenom,id,email,arrivee,depart,ip,statut,privilege,visite,bureau,cp,rue,ville,tel FROM lh_membre WHERE login=\''.mysql_real_escape_string($login).'\' AND pass=\''.md5($pass).'\' AND statut=\''.$base.'\' AND valid=\'1\'', $connexion) or die(mysql_error());

// on vérifi que l'on a trouvé quelque chose AVANT de traiter
// le résultat (parceque forcement si y a pas de résultat)
if(mysql_num_rows($verif) > 0)
{
   // pas besoin de faire une comparaison de nom et de pass puisque tu l'as fait
   // sous forme de condition dans ta requete SQL
  
   // on met directement toutes les infos dans la session et on rajoutera ce qu'il manque
   $_SESSION = mysql_fetch_assoc($verif);
  
   $_SESSION['authentification'] = true;
  
   // on met le cookie
    setcookie('visite', $_SESSION['visite'], time() + (365*24*3600));
   
    $time = (date("H") * 60) + date("i");
    // on met à jour les visites
    $_SESSION['visite']++;
   
    // je vois pas l'interet de stocker en bdd dans ce cadre là...
    // ça te prend de la place pour pas grand chose.. .
    if($_SESSION['ip'] != $_SERVER['REMOTE_ADDR'])
    {
        $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
        // je suppose que id est numérique dans ce cas pas besoin de ''
        $sql = mysql_query('UPDATE lh_membre SET ip=\''.$_SESSION['ip'].'\', visite=\''.$compteur.'\' WHERE id='.$_SESSION['id']);
    }
   
    // par contre il peut être interessant de stocker une variable spéciale
    // pour eviter le vol de session... par exemple
    $checkplus = $_SERVER['HTTP_ACCEPT_LANGUAGE'].$_SERVER['HTTP_ACCEPT_CHARSET'];
   
    if(isset($_ENV['USERDOMAIN'])) $checkplus .= $_ENV['USERDOMAIN'];
    if(isset($_ENV['COMPUTERNAME'])) $checkplus .= $_ENV['COMPUTERNAME'];
    if(isset($_ENV['PROCESSOR_IDENTIFIER'])) $checkplus .= $_ENV['PROCESSOR_IDENTIFIER'];
   
    $_SESSION['userCheck'] = md5($_SESSION['ip'].$checkplus)
   
   
    header('Location: membre/accueil.php');
    // on termine toujours le script après un header('location: ...
    exit();
}
else
{
    header('Location: index.php?erreur=login');
    // on termine toujours le script après un header('location: ...
    exit();
}


if(isset($_GET['erreur']) && $_GET['erreur'] == 'logout')
{
    // on vire la session
    $_SESSION = array();

    if (isset($_COOKIE[session_name()]))
        setcookie(session_name(), false, time()-42000);

    session_destroy();
   
    header('Location: index.php?erreur=delog');
    // on termine toujours le script après un header('location: ...
    exit();
}


Ensuite pour ta page d'accueil

session_start();
if (isset($_SESSION['authentification']) && $_SESSION['authentification'] == true)
{
    $checkplus = $_SERVER['HTTP_ACCEPT_LANGUAGE'].$_SERVER['HTTP_ACCEPT_CHARSET'];
   
    if(isset($_ENV['USERDOMAIN'])) $checkplus .= $_ENV['USERDOMAIN'];
    if(isset($_ENV['COMPUTERNAME'])) $checkplus .= $_ENV['COMPUTERNAME'];
    if(isset($_ENV['PROCESSOR_IDENTIFIER'])) $checkplus .= $_ENV['PROCESSOR_IDENTIFIER'];
   
    if($_SESSION['userCheck'] != md5($_SERVER['REMOTE_ADDR'].$checkplus))
    {
        header('Location: ../index.php?erreur=logout');
        // on termine toujours le script après un header('location: ...
        exit();
    }
}
else
{
    header('Location: ../index.php?erreur=logout');
    // on termine toujours le script après un header('location: ...
    exit();
}

@ tchaOo°


l'homme est un loup pour l'homme... .. .
samedi 20 mai 2006 à 17:22:13 | Re : Pourquoi mes sessions ne fonctionnent plus !!

kankrelune

Membre Club
Zut j'ais oublié...

remplacer

$compteur

par

$_SESSION['visite']

dans la requete d'update

et

$time = (date("H") * 60) + date("i");

ne sert à rien... en tout cas dans le code présent... .. .

@ tchaOo°

l'homme est un loup pour l'homme... .. .
samedi 20 mai 2006 à 17:25:47 | Re : Pourquoi mes sessions ne fonctionnent plus !!

arnold002

Je te remercie sincèrement de ta réponse et du temps que tu y as consacré.
Je vais étudier tout cela bien en détail et si j'ai un problème, je reposte.
A+

Arno
samedi 20 mai 2006 à 18:23:40 | Re : Pourquoi mes sessions ne fonctionnent plus !!

arnold002

Je saisi pas bien la partie sur la page d'accueil.

L'authentification semble se faire correctement puisque j'arrive sur accueil.php mais je tombe sur une page blanche sans message d'erreur particulier.
De plus cette fonction de verif ne fonctionne pas en local.
Tu vois une solution ?
samedi 20 mai 2006 à 18:25:26 | Re : Pourquoi mes sessions ne fonctionnent plus !!

arnold002

En local, j'obtiens ceci :

Notice: Undefined index: HTTP_ACCEPT_CHARSET in d:\sites web\easyphp1-8\www\hotellerieplus\index.php on line 27

Warning: Cannot modify header information - headers already sent by (output started at d:\sites web\easyphp1-8\www\hotellerieplus\index.php:27) in d:\sites web\easyphp1-8\www\hotellerieplus\index.php on line 34

La ligne 34 correspond à
header('Location: membre/accueil.php');
samedi 20 mai 2006 à 18:54:20 | Re : Pourquoi mes sessions ne fonctionnent plus !!

kankrelune

Membre Club
remplace...
$checkplus = $_SERVER['HTTP_ACCEPT_LANGUAGE'].$_SERVER['HTTP_ACCEPT_CHARSET'];
   
par

$checkplus = $_SERVER['HTTP_USER_AGENT'];

  if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) $checkplus .= $_SERVER['HTTP_ACCEPT_LANGUAGE']
if(isset($_SERVER['HTTP_ACCEPT_CHARSET'])) $checkplus .= $_SERVER['HTTP_ACCEPT_CHARSET']

@ tchaOo°

l'homme est un loup pour l'homme... .. .
samedi 20 mai 2006 à 19:07:08 | Re : Pourquoi mes sessions ne fonctionnent plus !!

arnold002

Bon je l'ai remplacé dans accueil.php, ca donne

session_start();

if (isset($_SESSION['authentification']) && $_SESSION['authentification'] == true)
{
 $checkplus = $_SERVER['HTTP_USER_AGENT'];

   if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) $checkplus .= $_SERVER['HTTP_ACCEPT_LANGUAGE'];
 if(isset($_SERVER['HTTP_ACCEPT_CHARSET'])) $checkplus .= $_SERVER['HTTP_ACCEPT_CHARSET'];
   
    if($_SESSION['userCheck'] != md5($_SERVER['REMOTE_ADDR'].$checkplus))
    {
        header('Location: ../index.php?erreur=logout');
        exit();
    }
}
else
{
    header('Location: ../index.php?erreur=logout');
    exit();
}

Je l'ai remplacé également dans index. L'utilisateur valide n'est plus reconnu. Impossible d'accéder à accueil.php


1 2

Cette discussion est classée dans : mysql, login, session, row, verif


Répondre à ce message

Sujets en rapport avec ce message

probleme de session [ par jdalton42 ] salut, sur mon site, je fais un espace membre, il fonctionne mais j'ai un probleme, il y a un bug! quand on est connecter il affiche bonjour pseudo Prendre des variable de session dans MySQL sur une autre table PROB [ par NORTIC_V ] VOILA le code ---------------------------------------------------------------------- // SCRIPT D'AUTHENTIFICATION session_start(); // début de sess Session [ par stu76 ] Bonjour, Je travail sur un site dont une partieest avec acces protéger, pour le code de sécurité j' ai trouvé un source sur ce site que je tente d'ada session en php [ par arnold002 ] Bonjour,J'ai mis en place un système de session et je voudrai savoir si c'est correct ou non.Le contenu du site n'est accessible qu'après saisi d'un l Problème d'actualisation [ par gringan ] Je suis débutant , j ai pondu ce code hier et j ai un probleme avec ://si login ok, fermeture de la fenêtre et reload de la page d'ouverturewindow.clo Authentification ie et firefox [ par mounelelabrador ] Bonjour, Je dois créer un site avec gestion membres, admins et vu que c'est pour un cours je ne peux pas vraiment télécharger sur internet des script Fonction header redirection dans include [ par drebin78945 ] Bonjour,Cette section correspond super bien à mon cas!!!!J'ai une page d'index unique sur mon site avec des variables d'url (index.php?pid=21212 par e Problème session zone membres [ par Florent06 ] Bonjour Lorsque je me connecte, je suis redirigé vers la page zonemembre.php et voici son code : session_start(); ligne 2 require 'conf.php'; if( phpmyadmin > choix session [ par RoX5 ] Bonjour,J'ai fait mon serveur web, j'ai bien installé mysql et donc phpmyadmin mais comme ce sera plusieur hébergement différent (pour des amis) il au Probleme de requete mysql [ par momoxe ] Bonjour, j'ai fait un code en php pour mon site web et il ne fonctionne pas.A chaque fois, mon serveur me renvoie "parse error on line 5, ce qui corre


Nos sponsors


Appels d'offres

Sondage...

Comparez les prix


HTC Magic

Entre 429€ et 429€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,998 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales