sessions avancées

Eléphant du PHP | 115 Messages

09 nov. 2009, 16:51

Bonjour à tous,

Je suis face à un petit problème que je n'arrive pas à résoudre.
Une page "recherche.php" execute un script de recherche suivant différents critères et les stocke dans des sessions.
Ex:
$_SESSION['nom']=$_POST['nom'];
$_SESSION['prenom']=$_POST['prenom'];
Etc...
Mon problème est, que lorsque j'ouvre "recherche.php" dans plusieurs onglets les paramètres s'ecrasent les uns les autres.
Comment individualiser les sessions ?
Quelques réalisations www.cdi-interactiv.com

Mammouth du PHP | 2937 Messages

09 nov. 2009, 17:07

Regarde du côté d'isset ().

Eléphant du PHP | 115 Messages

09 nov. 2009, 17:14

oui je connais isset(), mais je n'ai peut etre pas été assez clair parceque je ne vois pas trop le lien avec isset() et mon problème.

Pour revenir à l'exemple précédent, ma page de recherche donne des résultats (evidemment).Un clic dessus affiche dans la meme fenetre plus de details de ce "résultat". Et un bouton retour est censé me ramener à la page de recherche avec tous les critères pré-remplis.
Mais si il y a plusieurs pages, cela crée des complications. Ex si l'on ouvre 2 pages en parallele :

1ere page de recherche
clic sur un resultat
affichage des details
______________________2eme page de recherche
______________________clic sur un resultat
______________________affichage des details
retour à la recherche
PB : les criteres de la 2eme recherche sont chargés dans la 1ere page...

Des qu'une nouvelle fenetre s'ouvre, en fait, peut-on focer la creation de nouvelle session coté serveur ?
Quelques réalisations www.cdi-interactiv.com

Mammouth du PHP | 2937 Messages

09 nov. 2009, 18:55

Si je parle d'isset (), c'est dans l'optique de tester si une variable de session est déjà définie pour un index donné.
if (!isset ($_SESSION['nom'])) $_SESSION['nom'] = $_POST['nom'];
if (!isset ($_SESSION['prenom'])) $_SESSION['prenom'] = $_POST['prenom'];

ViPHP
ViPHP | 1996 Messages

09 nov. 2009, 23:53

Je penserais à contourner par l'utilisation d'isset(), d'une autre variable et d'un format tableau. Je n'emplois volontairement pas les fonctions ternaires pour être plus clair :
<?php
//le formulaire vient d'être posté
if (!isset($_SESSION["identifiant"]))
{
  $_SESSION["identifiant"] = 0;
  $identifiant = $_SESSION["identifiant"];
  $_SESSION["nom"][$identifiant] = addslahshes($_POST["nom"];
  $_SESSION["prenom"][$identifiant] = addslahshes($_POST["nom"];
}
else
{
  $identifiant = $_SESSION["identifiant"];
  if (isset($_SESSION["nom"][$identifiant] && $_POST["nom"] != $_SESSION["nom"][$identifiant])
  {
    $_SESSION["identifiant"]++;
    $identifiant = $_SESSION["identifiant"];
    $_SESSION["nom"][$identifiant] = addslahshes($_POST["nom"];
    $_SESSION["prenom"][$identifiant] = addslahshes($_POST["nom"];
  }
  else
  {
    $_SESSION["nom"][$identifiant] = addslahshes($_POST["nom"];
    $_SESSION["prenom"][$identifiant] = addslahshes($_POST["nom"];
  }
}
?>
Un truc du genre pourrais fonctionner ...
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 115 Messages

10 nov. 2009, 12:59

Super l'idée!
je l'ai adapté et ça marche nickel!

MERCI !
Quelques réalisations www.cdi-interactiv.com

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

10 nov. 2009, 14:59

Modération :
Si ta question est résolue, pense à l'indiquer pour que les futures personnes qui voudront consulter ce sujet sachent qu'il contient une solution.
Tu peux réaliser cette opération toi-même en cliquant sur le bouton Image en haut à droite de la réponse qui te semble la plus pertinente.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 115 Messages

10 nov. 2009, 17:49

Et ba non, mon sujet n'est pas résolu finalement...

Je suis bloqué à cause d'une réaction bizarre des sessions en tableau.
Si j'insère des valeurs comme ceci:
$aleatoire=rand(2, 1234542);   // 1562 par ex.
$_SESSION['nom'][$aleatoire]=$_POST['nom'];
$_SESSION['prenom'][$aleatoire]=$_POST['prenom'];
et que j'apelle plusieurs fois la page, impossible d'avoir une valeur en faisant :
echo $_SESSION['nom'][1562];
C'est vide... #-o
Quelques réalisations www.cdi-interactiv.com

Mammouth du PHP | 568 Messages

10 nov. 2009, 17:50

As-tu mis le session_start en haut de ta page?

Eléphant du PHP | 115 Messages

10 nov. 2009, 17:51

Oui il y est bien.

Je me suis demandé si cela n'etait pas du à nombre aléatoire trop grand qui dépasserait les limites du tableau...
mais ça le fait pour chaque nombre, grand comme petit.
Quelques réalisations www.cdi-interactiv.com

ViPHP
fab
ViPHP | 2657 Messages

10 nov. 2009, 21:12

Surtout, d'ou tu sors 1562 ?
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

ViPHP
ViPHP | 1996 Messages

10 nov. 2009, 22:23

Si tu mets :
<?php
session_start ()
$aleatoire=rand(2, 1234542);   // 1562 par ex.
$_SESSION['nom'][$aleatoire]=$_POST['nom'];
$_SESSION['prenom'][$aleatoire]=$_POST['prenom'];
?>
et tu appelles plusieurs fois la page : tu génères $aléatoire à chaque fois non ?
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 61 Messages

13 nov. 2009, 14:05

Bonjour,
je passais par là, et je vous lit avec étonnement puisque la base des sessions est
une session par visiteur (micro) alors j'espéres au moins que vous étes OK sur le fait que si je vais sur un site
dans trois onglets avec vos méthodes
$_SESSION["nom"][1] sera le même dans les trois onglets
$_SESSION["nom"][2] sera un autre nom mais le même dans les trois onglets :D

vous faites ce que vous voulez mais deux session par micro c'est :non:

Le cookies unique de session du micro en est la cause.
Un sourire pour conclure ;-)

ViPHP
ViPHP | 1996 Messages

13 nov. 2009, 14:47

Oui je sais : le but c'est de le contourner ce fameux cookies. Quitte à passer par l'URL.
Le but de jeu est de créer une super SESSION organisée en tableau numérique ou chaque utilisateur virtuel de la session serait identifié par un numéro.
Alors on est d'accord : 1 PC = 1 SESSION (plus ou moins) mais ta session, tu peux en faire ce que tu veux....
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 61 Messages

13 nov. 2009, 18:52

Oui je sais : le but c'est de le contourner ce fameux cookies. Quitte à passer par l'URL.
Le but de jeu est de créer une super SESSION organisée en tableau numérique ou chaque utilisateur virtuel de la session serait identifié par un numéro.
Alors on est d'accord : 1 PC = 1 SESSION (plus ou moins) mais ta session, tu peux en faire ce que tu veux....
Oui un cas d'école en fait puisqu'aller voir son site sous plusieurs onglets il faut le vouloir :D
Un sourire pour conclure ;-)