[PHP5] CLASSE DE SESSION

cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 - 31 oct. 2005 à 16:13
yogam Messages postés 1 Date d'inscription vendredi 31 décembre 2004 Statut Membre Dernière intervention 4 mai 2009 - 4 mai 2009 à 19:05
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/34419-php5-classe-de-session

yogam Messages postés 1 Date d'inscription vendredi 31 décembre 2004 Statut Membre Dernière intervention 4 mai 2009
4 mai 2009 à 19:05
FHX pourrais tu m'envoyer ta classe DB stp, je débute et je suis un peu perdu.
Merciiiiii
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
25 déc. 2005 à 21:31
je travaille sur la fonction callback... j'ais quasiement finit pour les liens après j'attaque les form... mais comme j'ais plusieurs choses sur le feu je ne peux te dire quand j'aurais finit... je te tiendrais au courant FhX... .. . ;o)

@ tchaOo°
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
17 nov. 2005 à 17:57
Jl'ai updaté sur http://www.codes-php.net/source-13--php5-classe-de-sessions.php
Etant donné que ca rame comme pas possible sur PHPCS. En attendant un moment de la journée un peu plus calme :)
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
13 nov. 2005 à 19:57
Oups, j'ai oublié un truc :

Pour ajouter un truc en session :
$session->vars['Variable'] = 'valeur';

Ca marche comme $_SESSION[], sauf que la, c'est :
$(nom_de_la_classe)->vars[].

Voila voila :) Ca évite principalement les accès aux disques via fichiers au niveau serveur.
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
9 nov. 2005 à 21:54
Ou je suis con, ou je suis vraiment à la rue :p
C'est incroyable comme c'est plus complexe que ce à quoi je m'attendais :/

Simplement pour récupérer 'http://www.google.com' de :
Google

Bah c'est pas gagné :o
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
9 nov. 2005 à 15:54
C'est parti !
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
9 nov. 2005 à 15:52
www.expreg.com
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
9 nov. 2005 à 15:44
Bon j'ai tout réécrit... mais personne n'a de bon lien pour les expressions régulières ?
Parce que, c'est pas que je sois vraiment mauvais la dedand, mais presque !

:)
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
9 nov. 2005 à 11:40
Voui, mais ce que je veux dire, c'est que si tu utilises une URL externe, tu es obligé d'avoir quelque chose dans le genre :
www.nomdedomaine.com/......./..../....../index.php

Donc, suffit de savoir si tu as www.nomdedomaine.com dans l'url, et dans ce cas la, tu ne parses pas la balise.
Le seul problème, c'est que les expressions régulières et moi, ca fait 30 :/
Faut serieusement que je m'y mette.
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
9 nov. 2005 à 11:36
heu y'a les chemins relatifs aussi ^^ (bon courage)
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
9 nov. 2005 à 10:33
Bah non quel con !
Il suffit de parser l'url pour voir le nom de domaine !

Bon, me reste plus qu'à plancher sur les expressions régulières (j'ai horreur de ca ...)
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
9 nov. 2005 à 10:32
Vi exacte pour le $link.

Le seul problème que je rencontre est que si je parse toutes les [www.google.com/index.php Google] ) je vais me retrouver avec ca :
[www.google.com/index.php?sid=dsflmjdsmlfk Google]
cs_Antidote Messages postés 163 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 8 mai 2010
9 nov. 2005 à 01:18
l'idée n'est pas bête et automatisé le parsage sur une fonction utilisé par ob_start('ma_fonction').

tu as oublié un " . " $link .= '"> Ton lien '; dans ton exemple.
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
8 nov. 2005 à 23:43
Dans ce cas, faut bien penser à faire passer ses IDs de session via les liens.

C'est bien pour ca que je teste via GET et POST :)

xxx.php?sid=dsfjsdmfsmdlkfsdmlkf <== GET

<== POST :)

Faut juste penser à le rajouter.
Et comment ?
Avec un pauvre if().

>
<?php
$link = '[xxx.php';
if ( !$session->session['use_cookie'] ) {
$link .= '?sid='.$session->sid;
}
$link = ' Ton lien ]';

echo $link;
?>
Faut pas oublier de mettre $sid en public et pas en private par contre.

Ce que tu peux faire aussi, c'est faire ta page html standard, et faire un parsing des liens si $session['use_cookie'] vaut FALSE par exemple.
A coup de str_replace ou de preg_replace :)
Faudrait que je pense à l'améliorer ce truc.
cs_Antidote Messages postés 163 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 8 mai 2010
7 nov. 2005 à 21:04
tout les aoliens qui refuse les cookies auront la même session :/ problème de proxy avec les ips
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
2 nov. 2005 à 13:45
Non, comme je l'ai dit, je ne fais aucune vérification d'ID via GET ou POST.

Le plus sécurisé aurait pu etre dans la requete sql :
$sql "SELECT objet, last_access FROM session WHERE sid '".mysql_real_escape_string($this->sid)."' ";

La c'est bon :)
stepibou Messages postés 112 Date d'inscription jeudi 11 mars 2004 Statut Membre Dernière intervention 11 octobre 2006
2 nov. 2005 à 12:05
Salut FhX,

Bonne source!
Je ne m'y connais pas trop, mais est c'est bien securisé au niveau de la méthode get?
si on met du code dans la barre d'adresse, un pro du bidouillage....
tu verifie ton get avec un strlen : est ce suffisant?

merci,
a+(un revenant)
apxa Messages postés 188 Date d'inscription mercredi 15 mai 2002 Statut Membre Dernière intervention 25 avril 2009
1 nov. 2005 à 14:30
iop,
pour la fermeture de la connexion, "pas d'erreur c'est lessieur".
faut fermer dans le destructeur.
les unset, "c'est bien... en abuser ca craint".
c'est une bonne chose.

Have Fun.
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
1 nov. 2005 à 13:36
"ok :-) ça reste quand même moins optimisé que de fermer la connexion toi-même ;-)" Y'a qu'à faire un unset() quand tu en as plus besoin et le tour est joué :)
Le problème ici, c'est que j'update le timer de session dans le destructeur de ma classe. J'aurais pu le faire ailleurs, mais comme un destructeur sert à ca, pourquoi ne pas me priver :)

Ok pour la déclaration, je changerai ca tout à l'heure.
apxa Messages postés 188 Date d'inscription mercredi 15 mai 2002 Statut Membre Dernière intervention 25 avril 2009
1 nov. 2005 à 10:46
iop
tres bien ta source.
pour la declaration, je dirais que seul les variables static peuvent etre instancié a cette endroit et la en effet c pas le cas.


Have Fun.
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
31 oct. 2005 à 18:49
"Normal, la fermeture de connection à la base se trouve dans le __destruct() de ma classe de DB"

ok :-) ça reste quand même moins optimisé que de fermer la connexion toi-même ;-)
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
31 oct. 2005 à 18:03
"on initialise les variables dans le constructeur, pas dans leur déclaration :"
Ah, moi qui faisait toujours comme ca :(

"je ne vois également pas de mysql_close() permettant de fermer une éventuelle connexion à la base ;-)"
Normal, la fermeture de connection à la base se trouve dans le __destruct() de ma classe de DB. Elle est implicite, voila pourquoi tu ne la vois pas :)
(Classe qui est au passage celle que j'ai posté sur PHPCS)
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
31 oct. 2005 à 16:13
Salut FhX :-)

juste une petite correction pour des trucs bateaux :

# public $session = array(); // Paramètre de session
# public $ip = '192.168.0.1'; // Ip du visiteur
# private $logged_in false; // Si l'authentification est ok> TRUE

on initialise les variables dans le constructeur, pas dans leur déclaration :

public $session; // Paramètre de session
public $ip; // Ip du visiteur
private $logged_in; // Si l'authentification est ok ==> TRUE


et dans le __construct()

$this->ip='blabla';
$this->logged_in=TRUE;

je ne vois également pas de mysql_close() permettant de fermer une éventuelle connexion à la base ;-)

a +