[php] explication sur les session svp

Résolu/Fermé
gasper - Modifié par gasper le 24/04/2011 à 11:10
 gasper - 24 avril 2011 à 17:07
Bonjour,

Pour amoindrir mon ignorance, une réponse svp:
je reprends la gestion d'un site. Dans chaque page de ce site, il y a un entete qui permet de définir le CSS commun. Ca, ça va.
Dans cet en-tête, il y a un session_start(). A quoi peut servir un session_start dans un en_tête à part foutre le bordel quand moi, je veux déclarer une session dans une feuille php?
ou bien est ce utile, en présumant que chaque variable créée peut faire partie des variables session (dans ce cas, bonjour les doublons) ?
merci pour l'explication

4 réponses

Bonjour

Moi je poserais la question différemment : à quoi bon déclarer tes sessions toi-même dans tes feuilles PHP alors qu'il y a un session_start() dans ce fichier ?
En le déclarant dans un fichier d'en-tête (qui est inclus systématiquement je suppose) tu es sûr de ne jamais en oublier, et tu ne verras pas de session disparaître parce que tu seras passé par une page où tu n'utilises pas de variables de session.
J'ai toujours géré mes sessions comme ça et pour l'instant je n'y ai vu que des avantages.
0
alors, comment gérer mes variables qui peuvent être redondantes? par exemple, une variable num qui etre soit dans un livre d'or, soit dans l'appel d'une équipe, soit dans l'appel d'un prix de location?
j avoue que ce n,est pas tres clair dans ma tête et je cherche à comprendre. Il est vrai que de lancer un session_start dans l'en-tête est sans doute plus judicieux, mais qu'en est-il quand j'appelle une page ou ne figure que des scripts php et pour lesquels il n'est pas besoin d'afficher l'en-tete?
si tu veux, je prends en charge un site qui s'occupe d'autisme et je voudrais mettre des formulaires d'inscription en ligne avec services adéquats.
merci pour ta réponse
0
Je ne vois pas ce que tu veux dire avec tes variables redondantes. session_start() n'ajoute pas de variables par lui-même, à part bien sûr les variables de session elles-mêmes, mais leur nom est en $_SESSION[''].
À moins que... Tu travailles peut-être avec register_globals on, c'est à dire que pour toi $_SESSION['num'] et $num sont une seule et même variable. Dans ce cas, effectivement, c'est la galère. Mais ça veut dire (excuse moi) que ton site est mal fichu. Tu devrais y remédier en passant register_globals à off, et en faisant une passe sur tous tes sources pour remettre des $_SESSION[] partout où c'est nécessaire. Bon courage.
Et comment faire pour les fichiers pour lesquels tu n'as pas besoin d'en-tête ? Tu peux te contenter d'ajouter simplement le session_start(); Sinon, ma méthode personnelle, c'est d'avoir un include "léger" qui regroupe des choses qui servent toujours ou presque, dont le session_start(); et de l'inclure systématiquement. J'ai des includes un peu plus lourds (bases de données, CSS) que j'inclus en fonction des besoins).
0
je m'exprime de manière confuse je pense et je m'en axcuse...
voici comment je perçois le problème:
quand on fait un session_start, pour récupérer les variables que je crée en page php ou html, je dois faire par ex $_SESSION['num']=$_POST['num'];
mais comment faire si $num a des valeurs diverses? pour moi $num peut etre relatif à un livre d'or, une inscription, un classement, etc...
c'est pour cela que je parle de redondance. Dois-je faire des variables à nom unique style num_or, num_enr, num_cla, num_repas, num_table etc..?
une variable $_POST['num'] ne remplacera la valeur de de $_SESSION['num'] que si je le lui demande, sinon la valeur num session pedurera?
dernières questions; meme si on ne les appelle pas, les variables sont elles toujours presentes dans une session si on prend la précation de faire un session_start à chaque page, et auquel cas, a quel moment une session peut prendre fin car je ne vois pas ou placer mon session_unset et destroy?
a te lire, et vus le nombre d'objets que tu charges , suis-je limité en nombre de variables dans une session (j'en ai besoin d'une trentaine environ)?
merci pour ta patience... tu peux constater que je cherche à comprendre, pas à copier bêtement du code
0
$_SESSION['num'], $_POST['num'] et $num sont trois variables différentes (toujours sous réserve que register_globals soit off). Il n'y a aucune confusion entre elles. D'ailleurs, tu peux très bien faire $_SESSION['num']=$_POST['id']; et $num=$_SESSION['toto'];.
mais comment faire si $num a des valeurs diverses?. Que veux-tu dire ? Une variable en programmation (PHP ou autre) c'est une "boite" qui contient une seule valeur à un moment donné, et peut contenir autre chose à un autre moment. Peu importe que tu serves de la même boîte pour un livre d'or, une inscription, un classement etc... Ce qui compte c'est que quand tu veux te servir d'une variable, par exemple pour le livre d'or, la dernière valeur qui a été mise dedans correspond bien au livre d'or. Mais ça, il suffit de suivre mentalement le déroulement de ton programme pour t'en assurer.
Il peut éventuellement être pratique de donner des noms différents simplement pour avoir des noms plus parlants et rendre ainsi le programme plus lisible.

une variable $_POST['num'] ne remplacera la valeur de de $_SESSION['num'] que si je le lui demande, sinon la valeur num session pedurera. C'est vrai pour toutes les variables : elles ne changent pas de valeur toutes seules, heureusement ! Elles sont détruites à chaque redémarrage d'un script (chaque nouvelle page), sauf le tableau superglobal $_SESSION qui est conservé tant qu'on fait session_start() au début de chaque script, ce qui en fait le moyen le plus pratique pour passer des informations d'une page à l'autre.

vus le nombre d'objets que tu charges Je ne "charge pas des objets", j'inclus des fichiers. Et 3 ou 4, c'est peu (en fait j'en inclus plus, je ne te dis pas tout). Et 30 variables de session, c'est a priori très peu, sauf si tu essayes de mettre un film en HD dans chaque variable de session :D
0
je te remercie pour toutes tes explications et ta patience. Je vais donc laisser le session_start dans mon en_tête et je ne détruirai mes variables que lorsque j'aurai terminé mon formulaire d'inscription. Je sais maintenant que je devrai faire un session_start avant tous mes scripts pour garder ma session active. Bonne journée. Cordialement
0