Sessions qui s'autodétruisent... help !
Forum Programmation : Sessions qui s'autodétruisent... help !
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.
est-ce que par hazard il ne te manquerais pas la partie qui recrée la session si elle existe?
euh.... certainement... Tu peux m'expliquer?
Tout mon code relatif aux sessions est ci-dessus....
tu as bien session_start() en début de script ?
oui, ca pour le coup, j'en suis certain, j'ai revérifié sur tous les scripts plusieurs fois... Meme les includes l'ont.
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.
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?
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....
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.
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
le session_register fonctionne toujours si je ne m'abuse, et il est fort pratique.
deprecated, d'accord, mais fonctionnel
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.
et pourquoi pas faire:
Code :
|
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 :
|
tin mais bordel va lire le tuto sur phpdebutant, tu fais n'importe quoi la.
| Citation :
|
j'y cours ! ;-)
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 :
|
Sachant que sur ma page de validation de login,
ca donne ca (en gros, je vais pas mettre tout mon code..)
Code :
|
Ya quelque chose qui te saute aux yeux encore? Si oui, dis le moi, parcque franchement, je ne vois pas.....
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
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
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 !
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.
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....
Il y a 411 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.
