Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1124 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  variables de session, a consommer avec modération?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

variables de session, a consommer avec modération?

n°324382
Mr yvele
yvele n'est plus.
Posté le 06-03-2003 à 11:04:03  profilanswer
 

Yo!  :hello:  
 
Ben voila, j'aimerai me rassurer, car j'utilise pas mal de variables de session, et qui sont consultés et modifiés tres tres souvent pour chacun des utilisateurs. (50 utilisateurs connectes en meme temps qui consultent et modifient 20 variables de session chacuns, toutes les 3 à 4 secondes...)
 
Donc j'aimerai savoir si plein de variables de session c'est bieng ou c'est pas bieng? Puis-je en abuser a volonter??
Ou si ça fait ramer a mort le serveur etc...
 
Rassurez moi siou plait!  :jap:


Message édité par Mr yvele le 06-03-2003 à 11:08:33

---------------
yvele n'est plus.
mood
Publicité
Posté le 06-03-2003 à 11:04:03  profilanswer
 

n°324408
Mr yvele
yvele n'est plus.
Posté le 06-03-2003 à 11:22:47  profilanswer
 

Heu et vous perso, vous en utilisez plein des variables de session?
 
 :bounce:


---------------
yvele n'est plus.
n°324449
beleg
黑社會
Posté le 06-03-2003 à 11:37:56  profilanswer
 

non ... assez peu, moi je garde en DB.
juste  
 
correspondant a la table online
chaine_unique
 
correspondant a la table membre
idmembre
login
 
et quand la saisie sur un formulaire est pas bonne, je colle en session le tableau des infos pour reconstituer mon formulaire.  
 

Citation :


Donc j'aimerai savoir si plein de variables de session c'est bieng ou c'est pas bieng? Puis-je en abuser a volonter??  
Ou si ça fait ramer a mort le serveur etc...  


 
je peux pas te repondre, je garde juste en session les infos necessaires pr passer dune page a lautre, le strict minimum pr recreer le contexte.
 
inconvenient que je vois : les sessions sont lues sur le disque a louverture de page + ecriture a chaque changement.


Message édité par beleg le 06-03-2003 à 11:41:16
n°324634
Mr yvele
yvele n'est plus.
Posté le 06-03-2003 à 14:01:03  profilanswer
 

Merci pour ta réponse..  :jap:  
 
Bah....
En fait moi j'utilise les sessions pour limiter au strict minimum le nombre de requettes vers la bdd...
 
Je pense qu'une requete mysql bouffe plus de ressources qu'une variable de session...?
Cette question m'interesse à fond... Quelquun auré une reponse?  :??:
 
 


---------------
yvele n'est plus.
n°324739
ethernal
Chercheur de vérité...
Posté le 06-03-2003 à 15:40:42  profilanswer
 

je suis en train de recoder une bonne partie de mon site pour utiliser au max les sessions.
Une requête bouffe bcp plus de temps qu'une session.
Tu fais un select id, login from user_online where sess_id='$session' est 10x plus lent que de rapatrier ces infos d'une session existante.
 
PS : Même une classe Session codée moi même sur base de fichiers est plus lente que d'utiliser les sessions php (qui créent elles-aussi des fichiers)...


---------------
...oups kernel error...
n°325144
Mr yvele
yvele n'est plus.
Posté le 06-03-2003 à 21:27:35  profilanswer
 

Ok.. merci ethernal...
 
C'est bien ce que je pensais, mais je voulais en etre bien sur..
Allé a+
 
 :jap:

n°325168
beleg
黑社會
Posté le 06-03-2003 à 21:53:44  profilanswer
 

ethernal a écrit :

je suis en train de recoder une bonne partie de mon site pour utiliser au max les sessions.
Une requête bouffe bcp plus de temps qu'une session.
Tu fais un select id, login from user_online where sess_id='$session' est 10x plus lent que de rapatrier ces infos d'une session existante.
 
PS : Même une classe Session codée moi même sur base de fichiers est plus lente que d'utiliser les sessions php (qui créent elles-aussi des fichiers)...


 
on est daccord, les infos dont on a besoin souvent (cad, des requetes qui reviendrait frequemment), interet a sauvegarder ca une fois pr toute. spour ca que je garde le login, l'id. Apres faut pas mettre des infos dont lutilité est reduite ... Pr le moment, jai pas a garder bcp de choses en session mais je vais y reflechir la pour un truc que je fais.
 
problematique : je genere une page en fonction de plusieurs tables, une fois les parametres bien validés, la page risque de ne pas changer bcp, donc ca serait pas mal de la stocker sous la forme dun fichier ( => supression de 3 requetes ), mais la ou jai a reflechir, c quand mettre a jour le fichier ...  
- a chaque changement de base,  je vais pas generer le source de la page pr le sauvegarder.
- je la sauvegarde quand le proprio regarde sa page, le source etant generé, ca me coute qune ecriture en plus par rapport a maintenant, et jeconomise qd les autres la consulte.
- je lui colle un bouton publier/valider/mettre en ligne.
 
umm la 2eme ...

n°325291
ethernal
Chercheur de vérité...
Posté le 06-03-2003 à 23:15:42  profilanswer
 

tu as 2 solutions facile à mettre en place :
- le bouton publier dont tu parlais (qui est +- la même solution que le chgt de base)
- un timer qui vérifie d'après la durée que tu donnes si la page est toujours d'actualité.
 
Si tu le fais par rapport à la personne qui consulte la page (sous entendu, si le proprio regarde alors update), tu devras faire une query pour voir si l'utilisateur est le proprio... non ? Donc j'écarterais cette possibilité.


---------------
...oups kernel error...
n°325610
beleg
黑社會
Posté le 07-03-2003 à 00:47:14  profilanswer
 

ahah comment on rattrape le topic ... pkoi faire une requete, l'ID de la personne connecté est important donc on conserve cette info via non pas la session mais presque pareil, une classe (qui sert a logguer / delogguer / qui est online / depuis quand), dont un simple == me permet de savoir si le proprio visite sa page  :) .
 
Finalement ... tant quil edite sa page et agit sur certaines des tables qui contiennent les infos necessaires a la generation de la dite page. on se contente dupdater la table en cause.
 
Il veut voir le resultat, (loutil d'edit noffre pas la vue globale, presence de Edition Bloc / suppression Bloc), la on enregistre sur le disque.
 
Une autre personne veut voir la page ?
- la page existe sur le dur, on charge le source (donc aucune requete de faite, youou)
- la page nexiste pas, on genere le source (3 requetes)
 
 
au fait, ton job en cobol ou php ? jai finlement été accepté pr celui de php, mais pour le moment, cest guere passionnant, je suis revenu a lage de pierre, pas de classes, pas de templates/skin, un bordel issue de 2 ans de dev  [:wam]  :o  ... et meme pas le droit de faire du net ... tt ca de 9'30 a 19  :sweat:  
 
vs voulez rire ?
 
exemple de code :
 

Code :
  1. if (pas le droit de lire cette page)
  2.    echo "<javascript>this.location = /index.php</javascript>"


 [:psywalk]  
 
 
 

n°325707
ethernal
Chercheur de vérité...
Posté le 07-03-2003 à 10:04:00  profilanswer
 

beleg a écrit :

ahah comment on rattrape le topic ... pkoi faire une requete, l'ID de la personne connecté est important donc on conserve cette info via non pas la session mais presque pareil, une classe (qui sert a logguer / delogguer / qui est online / depuis quand), dont un simple == me permet de savoir si le proprio visite sa page  :) .


 
je te suit plus là  :??:  
comment tu passes ta classe de page en page ??
ta classe "online" fait chaque fois au moins une query non ??


---------------
...oups kernel error...
mood
Publicité
Posté le 07-03-2003 à 10:04:00  profilanswer
 

n°325715
ethernal
Chercheur de vérité...
Posté le 07-03-2003 à 10:11:17  profilanswer
 

beleg a écrit :

au fait, ton job en cobol ou php ? jai finlement été accepté pr celui de php, mais pour le moment, cest guere passionnant, je suis revenu a lage de pierre, pas de classes, pas de templates/skin, un bordel issue de 2 ans de dev  [:wam]  :o  ... et meme pas le droit de faire du net ... tt ca de 9'30 a 19  :sweat:


 
aucune nouvelle :( à mon avis il n'ont jamais reçu ma candidature par mail.... faut qu'il les regarde parfois :D Peut-être qu'ils font des delete de masses à cause des spams ?? :lol:
 
Toute mes félicitations Mr le développeur PHP  [:tuffgong]  
C'est vrai qu'on dirait qu'ils sont un peu à la masse :(


---------------
...oups kernel error...
n°326451
beleg
黑社會
Posté le 07-03-2003 à 23:17:48  profilanswer
 

ethernal a écrit :


 
je te suiS plus là  :??:  
comment tu passes ta classe de page en page ??
ta classe "online" fait chaque fois au moins une query non ??


 
en mettant les infos en session pr les recuperer et recréer ma classe, oui je sais, il etait tard hier appremment  :D  :o , je travaille trop. donc les sessions c bon ... servez vs en.
 
et ma classe online fait soit 1 soit 2 query, le plus svt 2.

n°326662
ethernal
Chercheur de vérité...
Posté le 08-03-2003 à 15:52:35  profilanswer
 

hier en pleine soirée avec des copains, ils m'ont appelés (pour le job cobol)... j'ai rendez-vous lundi :)
 
pour le module online, j'ai trouvé un nouveau système pour éviter les querys inutiles :
Mettre le dernier temps de raffraichissement de la table online dans une variable de session.

Code :
  1. if ($HTTP_SESSION_VARS['timeout'] < date('U')-3*60){
  2.   $HTTP_SESSION_VARS['timeout']= date('U');
  3.   //query update/replace
  4.   //query delete where timeout < date('U')-3*60
  5. }
  6. // query count where timeout >= date('U')-3*60


 
je vois pas comment faire mieux.
Tu fais comment toi ?


---------------
...oups kernel error...
n°327313
beleg
黑社會
Posté le 09-03-2003 à 13:30:00  profilanswer
 

umm, si tu utilises les session pr savoir qd deconnecté une personne, comment maintiens tu une liste de connectés valide ?
faut que jemerge, je vois pas comment tu fonctionnes  :sweat:  
 
 

Code :
  1. if (session existe)
  2. { // un visiteur/membre poursuit sa visite
  3.    ...
  4.    select idonline,finconnection from online where idonline = ....
  5.    si (aucune ligne ou finconnection < maintenant)
  6.        deconnection
  7.    sinon
  8.        update online set finconnection = ".(time()+1800)." where idonline = ....
  9.    ...
  10. }
  11. else
  12. { // un visiteur arrive
  13.    ...
  14.    insert into online (idunique,debutconnection,finconnection) values ('".$this->idunique."',".time().",".(time()+1800)." )";
  15.    ...
  16. }


 
vider la table online

Code :
  1. "delete from online where finconnection < '".time()."'"


 
nb de personnes online, temps de connection

Code :
  1. select count from online
  2. select idmembre, debut connection from online ...


 
des gens qui travaillent le soir, faut se mefier  :o , bonne chance ...

n°327343
ethernal
Chercheur de vérité...
Posté le 09-03-2003 à 14:08:23  profilanswer
 

j'évite ces lignes-ci, mais le principe reste le même:

Code :
  1. select idonline,finconnection from online where idonline = ....
  2. si (aucune ligne ou finconnection < maintenant)


 
toute les pages contiendront  

Code :
  1. session_start();
  2. if ($HTTP_SESSION_VARS['timeout'] == NULL){
  3. //Nouveau connecté
  4.   $HTTP_SESSION_VARS['timeout']= time()-2400; //forcer l'update de la table online
  5. }
  6. //pas besoin de la query pour voir si il faut rafraichir la table online, puisque l'ont regarde la variable de session
  7. if ($HTTP_SESSION_VARS['timeout'] < time()-1800){
  8. //updater la table online et la variable de session
  9.   REPLACE into online (id_session,timeout, user_id, emplacement) values ('".$this->session_id."',".time().",...)";
  10.   $HTTP_SESSION_VARS['timeout'] = time();
  11.   "delete from online where finconnection < '".time()-1800."'"
  12. }


 
Lors de l'action "login", je stocke dans les variables de session l'id, le login du user et registered=true et j'update la table online.
 
Comptage des users online classique comme tu le fais.
 
 
La seule chose que je fait différemment, c'est que je stocke le temps du dernier rafraichissement de la table online dans une var de session.  Comme ça à chaque chargement de page, je ne dois pas regarder dans la table session si pour ce user là je dois updater ou pas.
En supposant que l'utilisateur charge 30x la page sur les 3mins de temps "online", j'économise 30 querys.
 
[job]
c'est une société de chasseur de tête qui s'en occupe... en général, ils appellent essentiellement le soir pour ne pas déranger les gens qui bossent)  
En plus, ils ont entièrement refait leur site en php  :love: (mais je pense que c'est une société externe qui s'en est occupé, ça sent le pro, surtout pour le design ! :()
[/job]


---------------
...oups kernel error...
n°327507
beleg
黑社會
Posté le 09-03-2003 à 17:31:14  profilanswer
 

ok je comprends mieux ... Mais apparemment, un surfeur peut au cours de sa visite avoir sa ligne online effacée et recrée des quil rouvre une page.
je pense que ca correspond pas a mes besoins mais je vais mettre ca ds un coin, et essayer de mieux me servir des sessions. Je tiens pas assez compte des sessions quand je fais mes modeles de données.
 
 [:dde]  
 

n°327589
ethernal
Chercheur de vérité...
Posté le 09-03-2003 à 17:50:23  profilanswer
 

beleg a écrit :

Mais apparemment, un surfeur peut au cours de sa visite avoir sa ligne online effacée et recrée des quil rouvre une page.


 
chez toi aussi avec la ligne "delete from online where time<time()"
non ?


---------------
...oups kernel error...
n°327616
beleg
黑社會
Posté le 09-03-2003 à 19:00:53  profilanswer
 

Moi, tant quil surfe et visite des pages, il est connecté pendant des jours si il veut, je repousse la date de fin de connection. Apres 30 minutes de non activité effectivement, il est viré de online et si il revient, il est considéré comme nouveau (panier vidé et/ou membre deconnecté selon les sites).  
 
Toi, il me semble, que si A et B se connectent au temps T1,surfent jusqua T1+30, passé les 30 minutes, A ne fait rien et B visite une autre page, B rentre dans if ($HTTP_SESSION_VARS['timeout'] < time()-1800) donc "delete from online where finconnection < '".time()-1800."'" :
La ligne de A est effacé, A se reveille a T1+35, il rentre aussi dans if ($HTTP_SESSION_VARS['timeout'] < time()-1800){  
 et donc recré une ligne ds online.  
 
mais effectivement, tu economises les queries, la rien a dire.
Faut que jetudie ca ... je fais 3 requetes minimum a chaque visite dune page
 
Si personne ne reste sur ton site plus d'une demi heure, les lignes ds online ne sont jamais effacées ?
 

n°327966
ethernal
Chercheur de vérité...
Posté le 10-03-2003 à 00:07:18  profilanswer
 

oui chez moi c'est 30min (3min en fait) à partir de la première connexion qu'il recharge 10 pages ou aucune.
Pour bien faire, je devrais updater si le temps contenu dans la var de session est par ex la moitié du temps de online prit en compte.
Imaginons que je prenne un temps de latence de 3mins pdt lesquels l'utilisateur est considéré comme online, je pourrais considérer d'updater ma table online toute les 1 min.
Evidemment, s'il recharge 40 pages dans les 59 secondes, puis aucune dans les 2.01 min qui restent, il sera considéré comme offline.  C'est un choix à faire.
Je vais tester tout ça puisque c'est encore en projet, j'espère pouvoir te montrer si ça fct bien ou pas bientôt.
 
 
Oui, si personne ne restent plus de 3mins, la table reste remplie.
Mais à la prochaine connexion, je la vide.  Ce n'est pas utile de la vider à chaque fois, de toute façon il ne prend en compte que ceux qui sont dans les temps (il y devrait y avoir un index sur le temps) et un mysql_num_rows sur un select(id) ou un count(id) n'est pas très gourmand.  
Et sans doute moins gourmand que de faire des delete à chaque chargement de page alors que ce sera utile une fois sur 10.


---------------
...oups kernel error...
n°328091
Mr yvele
yvele n'est plus.
Posté le 10-03-2003 à 10:13:43  profilanswer
 

Damned, on a piqué mon topic!!  
Vous voulez ptetre que je change le titre du topic?  :D
 
En tout cas merci pour vos reponses..  :jap:


---------------
yvele n'est plus.
n°328159
beleg
黑社會
Posté le 10-03-2003 à 12:00:50  profilanswer
 

bah on parle de données en base et de session, on reste ds le sujet. Pour un projet, jai developpé mon modele de base sans tenir compte du fait que ca serait dev sous du php, donc avec des sessions. Resultat, jai un truc robuste mais peu optimisé, qui a chaque page commence par faire 3-4 requetes quoi quil arrive vu que ttes les infos sont ds la base. En session, ya juste un lien vers le champ de la table online + quelques infos rajoutés justement pr economiser quelques requetes. Les sessions sont donc sous exploitées.
 
Donc quand jaurais un peu de temps, cad, ds longtemps, sceance optimisation.
 

Citation :

Oui, si personne ne restent plus de 3mins, la table reste remplie. Mais à la prochaine connexion, je la vide.


je suis a la ramasse des fois moi  :o
 

Citation :

Et sans doute moins gourmand que de faire des delete à chaque chargement de page alors que ce sera utile une fois sur 10.


 
je viens de consacrer ma pause a essayer de optimiser les delete de online .. et tt ce que je trouve, c :
si tirer un chiffre de 1 a 10 == 5  :sweat:
    alors faire le delete
 
 :D  jeconomise ~ 9/10 des requetes ... technique employée chez wanadoo-goa.com pr soulager les serveurs :lol:  cad virer 9/10 des visiteurs qui veulent sinscrire a leur nouveau jeux.


Message édité par beleg le 10-03-2003 à 12:11:08
n°328413
ethernal
Chercheur de vérité...
Posté le 10-03-2003 à 16:22:31  profilanswer
 

beleg a écrit :

 
 :D  jeconomise ~ 9/10 des requetes ... technique employée chez wanadoo-goa.com pr soulager les serveurs :lol:  cad virer 9/10 des visiteurs qui veulent sinscrire a leur nouveau jeux.


c'est une bonne idée aussi :)
wanadoo-goa :lol:
 
je rentre de l'interview là... réponse d'ici 2 semaines pour l'interview suivante avec le directeur de la boite.


---------------
...oups kernel error...
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  variables de session, a consommer avec modération?

 

Sujets relatifs
Taille maximal d'une trame dans une session TCP[PHP] problème de sécurité -important-> session ID bizarreté
[php] meme chose que remote_addr mais pour la session en coursMessage de warning à l'execution d'un session_start().
Ecrire dans un fichier des nom de variables. Pas leur valeur[PHP] session [resolu mais pas comme je veux ;) ]
Pb de variables entre ActionScript et PHPApache et Tomcat : problème de session ?
Upload chez free avec sessionSession VS base de donnée
Plus de sujets relatifs à : variables de session, a consommer avec modération?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR