2009-10-31 6 views
0

Quelqu'un pourrait-il me dire pourquoi mes variables $ _SESSION ne sont pas reportées sur mon autre page PHP qui est appelée avec ajax.AJAX + PHP: Session timeout

Toutes les pages ont session_start();

Il fonctionne sur ma machine locale, mais quand je télécharge sur mon serveur, cela ne fonctionne pas, et le rafraîchir me ramène à l'écran de connexion ...

EDIT:

les variables de session enregistrées une fois qu'un utilisateur se connecte à

$_SESSION['user_id'] = $user_id; 
$_SESSION['username'] = $user_email; 
$_SESSION['name'] = $un; 
$_SESSION['login_times'] = $login_time; 
$_SESSION['profile_pic'] = $profile_pic; 

Et quand le script ajax appelle l'autre PHP:

session_start(); 

$user_id = $_GET['id']; 
$newsfeed_id = $_GET['nf_id']; 
$comment = $_GET['comment']; 

$conn = mysql_connect('localhost', 'admin', 'root') or die(mysql_error()); 
mysql_select_db('main') or die(mysql_error()); 

// insert new comment 

$query = "INSERT INTO newsfeed_comments ". 
"VALUES ('', '{$_SESSION['user_id']}', '{$comment}', '{$newsfeed_id}')"; 

    mysql_query($query) or die(mysql_error()); 

Mais rien n'est renvoyé dans le texte de la réponse et les valeurs de $ _SESSION ["nom_utilisateur"] ont été désactivées et je suis redirigé vers la connexion.

Est-ce que quelqu'un sait quel est le problème?

Merci!

+0

Ce qui n'est pas exactement reporté, certaines données de session ou toute la session? S'il vous plaît soyez plus précis. –

+0

Est-ce que 'session_start' est appelée dans le script de connexion? Vous devez tracer si l'ID de session est passé (essayez le débogueur proxy Fiddler) –

+0

oui c'est. session_start(); est au-dessus de chaque page. Session travail partout, ils échouent seulement quand j'appelle une demande AJAX – Stephen

Répondre

3

Tous les cookies (y compris les cookies de session) ont un paramètre path qui définit le préfixe pour lequel le cookie sera valide. Si vous voulez que la session soit valide pour tout le domaine, placez-la sur "/".

Les paramètres de cookie de session peuvent être définis à l'aide de session_set_cookie_params.

0

Maintenant que j'y pense, ce sera probablement parce que vous enregistrez vos données SESSION pour un domaine spécifique. Sur votre localhost vous êtes juste localhost mais sur un serveur votre session pourrait être enregistrée seulement pour une partie spécifique de votre site. Passez un paramètre supplémentaire pour spécifier également le domaine.

Avez-vous fait session_start() avant de sortir quoi que ce soit sur la page de connexion?

La configuration de la session est ici: http://php.net/manual/en/session.configuration.php désolé, vous avez confondu vous utilisiez des cookies.

Essayez

var_dump($_SESSION); die(); 

sur chaque page pour voir ce que vous avez.

Appelez-vous également header() après avoir enregistré dans la session?

Ceci est un bon article débogage de votre situation: http://www.chipmunkninja.com/[email protected] bonne chance!

+0

Que voulez-vous dire par là? les données de la session sont enregistrées lorsque le script de connexion, qui amène l'utilisateur à sa page d'accueil .. à partir de là quand je commente et rafraîchit la page, la session disparaît. – Stephen

+0

comment puis-je transmettre ces paramètres? – Stephen

+0

je n'appelle pas un en-tête() n'importe où .. sur var_dump je reçois: array (0) {} – Stephen

0

J'ai compris quel était le problème ... C'est vraiment frustrant, mais c'est une solution rapide.

i ont 3 répertoires

/< - root /ajax < - pour les fichiers php ajax /js < - pour les fichiers javascript

J'envoyais des demandes de paiement ajax/comment.php et traitées le répertoire ajax/en tant que domaine différent. J'ai donc déplacé tous mes fichiers php Ajax dans le répertoire racine et les renommer en ajax_File.php et édité le javascript et maintenant ça marche.

C'est vraiment nul, mais n'importe qui sait s'il y a un moyen de le faire fonctionner dans un sous-répertoire, parce que c'est vraiment frustrant.

+0

Vérifiez ma réponse, cela devrait aider. –