2010-10-04 7 views
0

J'ai une classe qui définit diverses variables de session. Après avoir défini la variable de session, je fais un vidage var de SESSION et j'obtiens une sortie de tous. tout va bien jusqu'ici. Ensuite, je navigue vers une autre page.Pourquoi mon tableau SESSION est-il OK sur une page mais vide sur une autre?

session_start(); // i call this right after opening the php tag 
var_dump($_SESSION); // i call this after setting the variables 

et c'est vide cette fois?

Réglage mes sessions

while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) 
    { 
      $_SESSION['atid'] = $row['autotaskid']; 
      $_SESSION['bmsid'] = $row['bmsid']; 
      $_SESSION['shavlikid'] = $row['shavlikid']; 
      $_SESSION['cpid'] = $row['cpid']; 
    } 

Essayer d'utiliser les variables sur une autre page

$autotaskid = $_SESSION['atid']; 
    $tsql = "SELECT COUNT(tblBackupArchive.StatusID) AS total, tblBackupArchive.StatusID ". 
      "FROM tblBackupArchive INNER JOIN ". 
      "tblBackup ON tblBackupArchive.BackupID = tblBackup.BackupID ". 
      "GROUP BY tblBackupArchive.StatusID, tblBackup.ClientID ". 
      "HAVING (tblBackup.ClientID = " . $autotaskid . ")";  

Résultats dans

Undefined index: atid in C:\Program File... 

Je me suis assuré que je suis l'émission du début _session(); fonction avant que tout autre code est exécuté sur chaque page qui les utilise.

Un autre point important: la page php qui appelle la méthode définissant les variables dans une iframe. Quand j'ouvre la page dans un nouvel onglet/fenêtre, les sessions sont correctement définies. C'est presque comme si la fenêtre principale avait des variables de session et que chaque iframe garde sa propre séparation.

Des idées?

Billy

Répondre

6

Des idées?

Oui. Vous devez apprendre à déboguer votre code.
Comme vous pouvez le voir, votre question ne peut pas être répondue par devinettes. Donc, il est temps pour le travail manuel.

  • D'abord, assurez-vous que vous voyez une erreur s'est produite. Juste ajouter un intentionnel et voir. Si vous ne voyez aucune erreur, vous devez l'activer.
  • puis faire un script de test pour voir si vos sessions fonctionnent

    <? 
    session_start(); 
    if (!isset($_SESSION['counter'])) $_SESSION['counter']=0; 
    echo "Refreshed ".$_SESSION['counter']++." times.<br> 
    <a href=".$_SERVER['PHP_SELF'].'?'.session_name().'='.session_id().">refresh</a>"; 
    ?> 
    

si cela fonctionne, font d'utiliser des cookies

<? 
session_start(); 
if (!isset($_SESSION['counter'])) $_SESSION['counter']=0; 
echo "Refreshed ".$_SESSION['counter']++." times.<br> 
<a href=".$_SERVER['PHP_SELF'].">refresh</a>"; 
?> 

si cela fonctionne aussi, vous devez vérifiez votre code.
Imprimez les variables, réduisez le code, etc.

+2

+1 Enseigner un homme à pêcher .... –

+0

Salut merci pour vos suggestions. J'ai ajouté le contre-test que vous avez posté. La chose intéressante est qu'après avoir essayé ce test, puis en naviguant vers la page où mes sessions sont définies, puis en passant à l'autre page, au lieu de voir le tableau de session vide, je vois maintenant le compteur. Le problème doit alors être avec le code définissant les sessions. J'ai mis les sessions dans une méthode utilisée seulement par la première page. peut-il être qu'ils sont détruits après avoir été utilisé? – iamjonesy

+0

@Jonesy le code que vous avez posté ici est correct. Bien que je le fasse avec une seule instruction '$ _SESSION ['savedata'] = $ row;' et l'utilise ensuite comme $ autotaskid = $ _SESSION ['savedata'] ['atid']; 'parfois cela peut aider. sinon - vous devez ajouter var_dump ($ _ SESSION); dans autant d'endroits que vous pouvez –

1

Basé sur votre premier bloc de code, il semble que vous pourriez appelez session_start()après vous avez essayé de définir les variables $_SESSION. Vous devez d'abord appeler le session_start()! Je peux me tromper, auquel cas je m'excuse. Mais basé sur l'extrait de code ci-dessus, il pourrait bien être votre problème!

+0

désolé c'est juste moi les gens de confusion, j'ai coupé du code là. J'appelle en fait session_start AVANT n'importe quoi d'autre. Juste après l'ouverture de la balise php. merci bien – iamjonesy

+0

Dans ce cas, je ne suis pas sûr! Cela pourrait concerner votre environnement. Je n'ai jamais travaillé avec PHP local sur Windows auparavant. – chigley

0

Si vous appelez session_close() où vous devriez être, alors détruisez-vous accidentellement la session? Peut-être un trop grand nombre d'appels session_destroy()?

Et par un peu trop je veux dire un.

2

Essayez de comparer les identifiants de session. Si vous obtenez un identifiant de session différent pour les appels, la gestion de session n'est pas correctement configurée.

I.e. Votre code peut s'appuyer sur les identifiants de session stockés dans les cookies, mais cette option est désactivée (voir votre php.ini). En tant que mesure de débogage, vous pouvez utiliser des "identifiants de session transparents" (ils sont concaténés à n'importe quel lien), mais pas pour le code de production.

+0

Salut, j'ai posté cette question il ya un moment et a fini par réinstaller wamp. Je l'ai encore rencontré et j'ai commencé une nouvelle question. S'il vous plaît pouvez-vous y jeter un coup d'œil? http://stackoverflow.com/questions/4358525/php-session-variables-not-being-maintaned – iamjonesy

0

Assurez-vous que:

  1. Vous exécutez session_start() avant de définir ou obtenir une variable de session. (Si le serveur est configuré pour les sessions de démarrage automatique, cela n'est pas nécessaire.)
  2. Les deux scripts résident sur le même (sous) domaine. (Il ne suffit pas que les pages soient sur le même serveur pour partager une session, elles doivent aussi appartenir au même (sous) domaine.)
Questions connexes