OVH Cloud OVH Cloud

Session

2 réponses
Avatar
billard.eric
Bonjour,
Je rencontre pas mal de difficultés avec les sessions et je poserai
ici une question précise, mais tout d'abord, je voudrais vérifier que
j'ai bien compris le mécanisme.
Si vous avez quelques minutes à m'accorder :
1 - chaque script doit contenir :
if (isset($PHPSESSID)) session_start($PHPSESSID); else
session_start();
==> J'ai essayé de l'enlever, on perd les variables.
Ca a l'air de marcher aussi lorsque la ligne est dans un fichier
machin.inc.php qu'on appelle par require_once dans chaque script.
Correct ?

2 - Dans le premier script qui crée une variable de session :
$_SESSION['cQuery']="select * from table where condition";
==> est correct et suffit (on dirait...) ? ou faut il écrire :
$cQuery="select * from table where nouvelle condition";
session_register['cQuery'];
pour créer les variables de session et les valoriser ?

3 - chaque script ayant besoin de manipuler les variables, les
récupère comme ceci :
$cQuery=$_SESSION['cQuery'];
==> Mais si je ne commet pas d'erreur, c'est inutile, $cQuery existe
dès le session_start() pour le script, et contient évidemment la
valeur.

4 - Dans le cas ou l'on change la valeur d'une variable, on "prévient"
le gestionnaire de session :
$_SESSION['cQuery']="select * from table where nouvelle condition";
==> Pareil, $cQuery="select * from table where nouvelle condition"; a
l'air de suffire largement.

Donc les sessions, ce serait simple ? Alors pourquoi la doc est-elle
si vague ?
p.e. concernant session_start : il n'est pas indiqué que c'est
obligatoire en tete de chaque script.
concernant session_register : la méthode alternative n'est pas
indiquée...
à quoi peut bien servir session_name ? session_module_name ?
Et surtout, pourquoi mes scripts ne fonctionnent-ils pas ? Je
donnerais des détails plus tard !
En attendant,
Salutatous et merci
&ric.

2 réponses

Avatar
CrazyCat
Eric BILLARD wrote:

1 - chaque script doit contenir :
if (isset($PHPSESSID)) session_start($PHPSESSID); else
session_start();


Effectivement: si ta session existe, tu la relance, sinon tu en crées
une vide

2 - Dans le premier script qui crée une variable de session :
$_SESSION['cQuery']="select * from table where condition";
==> est correct et suffit (on dirait...) ? ou faut il écrire :
$cQuery="select * from table where nouvelle condition";
session_register['cQuery'];
pour créer les variables de session et les valoriser ?


Passer une requète en session?
Ne serait-il pas plus simple d'avoir une fonction de traitement du type:
fonction my_session($_SESSION['cQuery']) {
$sql_sess = "SELECT * FROM table WHERE condition_basée_sur_cQuery";
$req_sess = mysql_query($sql_sess);
list($cQuery) = mysql_fetch_row($req_sess);
return $cQuery;
}
(traitement totalement arbitraire et faux)

3 - chaque script ayant besoin de manipuler les variables, les
récupère comme ceci :
$cQuery=$_SESSION['cQuery'];
==> Mais si je ne commet pas d'erreur, c'est inutile, $cQuery existe
dès le session_start() pour le script, et contient évidemment la
valeur.


Pour le traitement, il est quand même intéressant de récupérer ta
variable, mais ça n'apporte pas grand chose

4 - Dans le cas ou l'on change la valeur d'une variable, on "prévient"
le gestionnaire de session :
$_SESSION['cQuery']="select * from table where nouvelle condition";
==> Pareil, $cQuery="select * from table where nouvelle condition"; a
l'air de suffire largement.


Si je me souviens bien, il faut effectivement modifier $cQuery, à la fin
de ton traitement tu dois avoir un session_register("cQuery); qui va
donc mettre à jour la session

p.e. concernant session_start : il n'est pas indiqué que c'est
obligatoire en tete de chaque script.


Il vaut mieux: tu ne peux pas rajouter d'entête plus tard

concernant session_register : la méthode alternative n'est pas
indiquée...


Alors n'utilise pas l'alternative :) (lol)

--
Tout sur les eggdrops
http://www.c-p-f.org
ML @

Avatar
billard.eric
Merci, CrazyCat

2 - Dans le premier script qui crée une variable de session :
$_SESSION['cQuery']="select * from table where condition";
==> est correct et suffit (on dirait...) ? ou faut il écrire :
$cQuery="select * from table where nouvelle condition";
session_register['cQuery'];
pour créer les variables de session et les valoriser ?


Passer une requète en session?
Ne serait-il pas plus simple d'avoir une fonction de traitement du type:
fonction my_session($_SESSION['cQuery']) {
$sql_sess = "SELECT * FROM table WHERE condition_basée_sur_cQuery";
$req_sess = mysql_query($sql_sess);
list($cQuery) = mysql_fetch_row($req_sess);
return $cQuery;
}
Je ne comprend pas tres bien en quoi, créer une fonction de 4 lignes,

est plus simple que de se passer la phrase sql et l'activer par
$db->query($cQuery), eh oui, j'utilise pear...

4 - Dans le cas ou l'on change la valeur d'une variable, on "prévient"
le gestionnaire de session :
$_SESSION['cQuery']="select * from table where nouvelle condition";
==> Pareil, $cQuery="select * from table where nouvelle condition"; a
l'air de suffire largement.


Si je me souviens bien, il faut effectivement modifier $cQuery, à la fin
de ton traitement tu dois avoir un session_register("cQuery); qui va
donc mettre à jour la session
J'ai peur de ne pas comprendre ce que tu veux dire, d'après mes essais

$cQuery="select * from table where nouvelle condition";
suffit largement à mettre à jour la variable de session.

p.e. concernant session_start : il n'est pas indiqué que c'est
obligatoire en tete de chaque script.
Il vaut mieux: tu ne peux pas rajouter d'entête plus tard

Peux-tu developper ça, je ne capte pas du tout...


Pour tout dire, l'enchainement que j'ai conçu est le suivant :
- un script formulaire pour choisir des champs et des valeurs à
tester,
- un script qui analyse ($_POST['']=) les données du formulaire pour
construire la clause WHERE du SELECT ($_SESSION['cQuery']=...)
et enfin un script (conçu par JP DEZELUS) qui s'appelle lui meme, pour
effectuer la requete et afficher les lignes de résultat par paquets de
30 et qui utilise donc la chaine $cQuery avec (LIMIT $debut, $nblignes
pour "scroller" dans le résultat).
Merci encore,
EB