2009-07-16 11 views
6

J'ai un fichier modèle qui contient tous mes en-tête, pied de page et informations communes. Il inclut le contenu approprié pour la page en cours (modèle de vue en deux étapes). J'essaie de mettre en place un système de connexion en utilisant les variables de session PHP. Je peux définir la variable et parfois ils fonctionnent mais parfois ils disparaissent. Cliquer sur les liens les fera parfois revenir.Variables de session PHP - disparaissent et réapparaissent

My site

Connectez-vous avec

Nom d'utilisateur: Test passe: Test

Il y a var_dumps de session_id et $_SESSION en haut.

Cliquez sur Accueil. Si les variables de session disparaissent, cliquez sur home (peut prendre jusqu'à 10 fois) pour voir les informations de session revenir. Cliquez sur l'autre navigation et parfois les informations de la session restent visibles et parfois non.

Voici le code de la session en haut de mon fichier modèle.

<?php 
session_start(); 

require './classes/DBInterface.php'; 
$db = new DBInterface(); 

if($_REQUEST['submit'] == 'Login') { 
    $username=$_POST['username']; 
    $password=$_POST['password']; 

    echo '-- login -- '.$username; 
    $rs = $db->verify($username,$password,"admin",0); 
    $admin = $rs->current(); 
    if ($rs->valid()) { 
     $_SESSION['username'] = $username; 
    } 
} 

echo ' -- session id -- '; 
var_dump(session_id()); 
echo ' -- session var -- '; 
var_dump($_SESSION); 

J'utilise PHP5.

Répondre

4

Si vous utilisez startlogic (semble vous ? sont) pour votre hébergement, avez-vous essayé de faire ce qu'ils disent dans leur FAQ: http://www.startlogic.com/knowledgebase/read_article.bml?kbid=600

ils indiquent ceci:

pour exécuter des sessions PHP, inclure le code suivant en haut de tout script PHP qui utilise des sessions: session_save_path ("votre répertoire personnel path"/cgi-bin/tmp); session_start();

Peut-être que cela vous aidera? Surtout s'ils utilisent une sorte d'équilibreur de charge, qui équilibre/tmp, mais pas votre répertoire personnel?

+0

Merci. Il ne m'est jamais venu à l'esprit que ça pourrait être une chose d'hébergement. Maintenant, je peux remettre tout le code que j'ai déchiré en essayant de simplifier mon problème. – Emily

+0

Eh bien, c'était un problème intéressant ^^ Amusez-vous :-) –

2

Si vous utilisez une configuration à charge équilibrée, il se peut que seul un des N serveurs dispose des données de session correctes.

Par défaut, les données de session sont stockées sur le système de fichiers.
Par session un fichier est stocké dans/tmp/et commence par "sess" suivi de l'ID de session

1

Vous êtes absolument certain qu'il n'y a jamais eu d'appel avant? Je sais que session_start() modifie les en-têtes, et à part ça, je ne sais pas pourquoi cela ne fonctionne pas.

Allez-y et tourner en cas d'erreur de déclaration en haut du script, juste avant le session_start() appel, et de voir comment cela aide à suivre cette baisse:

error_reporting(E_ALL^E_NOTICE); 
ini_set('display_errors',1); 
session_start()