Tom's Guide > Forum > Programmation > Sessions qui s'autodétruisent... help !

Sessions qui s'autodétruisent... help !

Forum Programmation : Sessions qui s'autodétruisent... help !

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

Bonjour à tous,
Je bosse sur un projet de site web php qui contiendra une partie administration. J'ai déjà developper la majorité de cette zone restreinte par login+pass mais un problème que je ne comprend pas persiste.
J'utilise un système de sessions pour cette zone et donc toutes les pages ont à leur début le fameux session_start(); ainsi qu'une vérification du genre

if ((!isset($_SESSION['var'])) or (!isset($_SESSION['var2']))) {header ("Location :error.php" ); exit; }
if (($_SESSION['var']!="string" ) or ($_SESSION['var2']!="string2" )) {header ("Location :error.php" ); exit; }

les variables $_SESSION['var'] et $_SESSION['var2'] sont déclarées dans la page qui analyse les log+ pass et qui les acceptent. Bien sur, ces variables ne sont déclarées que si les log et pass sont reconnus.

Quand, je m'identifie, pas de problèmes, je passe, mais au bout d'une durée indeterminée, il me remet à la page de login, soit (en tous cas, c'est ce que je ne comprend pas) la session n'existe plus alors que le cache_expire de mon hébergeur est de 180 soit 3 heures sauf erreurs de ma part et ce problème arrive en moins de 3 heures à chaque fois, ca peut etre 10 min comme ca peut etre 20 etc... Pour info, mon hébergeur est OVH, je ne sais pas si ca a un rapport direct mais ne sait on jamais....

Est ce que vous voyez le problème? Je suis dans mes débuts alors je doute de mon code... J'ai essayé de chercher une réponse mais ca fait deux semaines que je me penche sur le problème sans y voir plus clair.

Merci d'avance pour votre aide.

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

est-ce que par hazard il ne te manquerais pas la partie qui recrée la session si elle existe?

Répondre à crazycat@idn

euh.... certainement... Tu peux m'expliquer?
Tout mon code relatif aux sessions est ci-dessus....

Répondre à satyre

tu as bien session_start() en début de script ?

Répondre à okinou

oui, ca pour le coup, j'en suis certain, j'ai revérifié sur tous les scripts plusieurs fois... Meme les includes l'ont.

Répondre à satyre

la logique voudrait que le code fonctionne ainsi (quand on est loggué):
session_start();
$var1 = $_SESSION['var1'];
$var2 = $_SESSION['var2'];
session_register("var1", "var2" );

Cela permet de bien régénérer tes sessions à chaque appel d'une page.

Répondre à crazycat@idn

merci beaucoup pour ton aide, je vais mettre ca sur tous les scripts pour essayer seulement je mets la vérification de if après ?
et dans la vérification, je prends $var1 et $var2, non pas $_SESSION['var1'] et $_SESSION['var2'], n'est ce pas?

Répondre à satyre

encore une question, dans session_register, je mets toutes les variables de session ou juste celles des vérifications?

Parcque bien sur, le login ainsi que les droits et d'autres infos sont stockés en session et ont leur importance dans chaque page....

Répondre à satyre

je te dirais que tu met un peu ce que tu veux... tout dépend de la manière dont tu traites ta session (et son contenu) après.

Pour ma part, je partirais plutôt sur un cookie contenant un tableau de données (quitte à jouer avec serialize) très limité et une fonction de vérification.

Répondre à crazycat@idn

Non Crazy, il ne faut plus utiliser session_register.

Il s'agit des tableaux global $_SESSION['var'] comme tu l'a dit la premiere fois .

$_SESSION['var'] = 'login';

phpdebutant.org => a droite

Répondre à okinou

le session_register fonctionne toujours si je ne m'abuse, et il est fort pratique.
deprecated, d'accord, mais fonctionnel :)

Répondre à crazycat@idn

peut etre, mais il est mieux de se mettre au gout du jour pour des raison de sécurité. Sinon ils n'auraint pas inplanté ces tableaux.

Répondre à okinou

et pourquoi pas faire:

Code :
  1. <?
  2. foreach ($_SESSION as $key => $val) {
  3.   $_SESSION[$key] = $val;
  4. }
  5. ?>

Répondre à crazycat@idn

J'ai donc mis session_register("var", "var2",...) avec toutes les variables de sessions sur chaque page. Ca marche un peu mieux à mon gout mais le problème persiste..

Je me demandais si ca faisait un énorme trou de sécurité si je faisais mon propre principe de session, cad, référencé tous les PHPSESSID dans une db parcque j'ai déjà une table qui log toutes les entrées accéptées ou refusées avec les infos comme ip, port server, port client, heure, date, login, etc....

Pour le principe de foreach Crazy, je ne maitrise pas du tout cette fonction, peut tu m'expliquer?

Dsl d'etre une ####rie de newbie !! :-D

Pour vous situer, je vous mets mon code actuel au début de chaque page :

Code :
  1. <? session_start();
  2. $var1 = $_SESSION['var1'];
  3. $var2 = $_SESSION['var2'];
  4. $var3 = $_SESSION['var3'];
  5. $var4 = $_SESSION['var4'];
  6. $var5 = $_SESSION['var5'];
  7. session_register("var1", "var2", "var3", "var4", "var5" );
  8.     if ((empty($var1)) or (empty($var2)))
  9.     {$_SESSION['error'] = 'error1';
  10.         header ("Location: error.php" );
  11.         exit;
  12.         }
  13.     if (($var1 != "string1" ) or ($var2 != "string2" ))
  14.     {$_SESSION['error'] = 'error2';
  15.         header ("Location: error.php" );
  16.         exit;
  17.         }
  18.         ?>

Répondre à satyre

tin mais bordel va lire le tuto sur phpdebutant, tu fais n'importe quoi la.

Répondre à okinou

Citation :


Okinou a écrit :
tin mais bordel va lire le tuto sur phpdebutant, tu fais n'importe quoi la.


j'y cours ! ;-)

Répondre à satyre

ok, je suis allé voir ton tuto et il ne m'avance pas sérieux....
C'est ce que j'avais au début
le code que j'ai affiché est le code d'après les conseils de Crazy Cat...

Mon code de base était :

Code :
  1. <?
  2. session_start();
  3.     if (!isset($_SESSION['var1]) or !isset($_SESSION['var2]))
  4.     {
  5. if ($_SESSION['var1'] !="string1" or $_SESSION['var2']!="string2" )
  6.     {header ("Location: error.php" );
  7.         exit;
  8.         }
  9. }
  10. else
  11. {
  12.     header ("Location: error.php" );
  13.         exit;
  14.         }
  15.         ?>

Répondre à satyre

Sachant que sur ma page de validation de login,
ca donne ca (en gros, je vais pas mettre tout mon code..)

Code :
  1. if ($LoginOK == true)
  2.             {
  3.             $_SESSION['var1'] = "string1";
  4.             $_SESSION['var2'] = "string2";
  5.             header ("Location: identification.php" );
  6.             exit;
  7.             }
  8.         else
  9.             {
  10.             $LoginOK = false;
  11.             header ("Location: error.php" );
  12.             exit;
  13.             }

Répondre à satyre

Ya quelque chose qui te saute aux yeux encore? Si oui, dis le moi, parcque franchement, je ne vois pas.....

Répondre à satyre

Au final, que cherche tu a faire, une auth par mysql/php ?

Je précise : formulaire d'identification qui regarde sur une table mysql si le login/password est correct ?

Dis moi et si j'ai le temps je te ferais un exemple basique correct.


Edit: ton code coloré 3 post au dessus à déja une meilleur tete :)

Répondre à okinou

Le code qui t'as choqué est le code que j'ai remodelé en pensant que CrazyCat avait raison à propos de session_register() !

Le code que j'ai mis 4 posts au dessus était mon code initial..

Et oui c'est une auth par Mysql/php

Répondre à satyre

et le truc, c'est que je ne penses pas etre totalement stupide non plus, ca fait maintenant 8 mois que je me suis passionné pour le php et mysql aussi du coup.
Donc j'ai épluché pas mal de tutos, je pense avoir appris pas mal de choses dans ce laps de tp. Et ce dont j'ai besoin, c'est une zone sécurisée fiable.....

C'est pour ca déjà à la base que je met 2 variables de session à vérifier, je me dit que si un hacker en trouve un, variable + sa chaine de caractére, il lui faudra encore trouver la seconde pour passer dans la zone.

Je me trompe peut etre mais je compte sur les gens qui maitrisent depuis longtp pour me le dire !

Répondre à satyre

je pourrais voir ton code initial de A a Z ?

Dans l'ordre :

connection a la base
session_start()
requete pour selectionné le couple user/password (un count ou mysql_num_rows)
si 1 = bon sinon pas bon
t'enregistre
ensuite t'enregistre le login et une autre var en session (surtout jamais le pass)
et sur tes page protégé tu verifie que $_SESSION['login'] (par ex) est bien déclaré et contient bien une chaine de caractere (au final, qui ne soit pas vide) avant d'affiché ou non la page membre.

Répondre à okinou

Ce qui est "marrant" quand meme c'est que les sessions marchent lorsque je me logue mais au bout d'une durée aléatoire, ca se déconnecte alors que le code de chaque page de vérification est identique....

Répondre à satyre
Tom's Guide > Forum > Programmation > Sessions qui s'autodétruisent... help !
Aller à :

Il y a 411 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens