2010-07-13 2 views
2

A c'est plus simple, si file_1.php contientProblème avec la session de PHP dans Xampp

<?php 

    session_start(); 

    $_SESSION["test_message"] = "Hello, world"; 

    header("Location: http://localhost/file_2.php"); 
?> 

et file_2.php contient

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
</head> 
<body> 

<?php 

    if (!(isset($_SESSION["test_message"]))) 
    echo "Test message is not set"; 
    else 
    echo $_SESSION["test_message"]; 

var_dump($_SESSION); 

    session_destroy(); 
?> 

</body> 
</html> 

le résultat est Test message is not set et un var_dump ($ _ SESSION) retourne null - locally, with Xampp. Cependant, si je télécharger ces mêmes fichiers sur un site Web hébergé payants, cela fonctionne et je vois

Hello, world 
array 
    'test_message' => string 'Hello, world' (length=12) 

Quand je regarde PHPinfo sous Xampp il montre Session Support enabled. Qu'est-ce que je fais mal?

Répondre

3

Vous avez oublié le session_start en haut de file_2.php

Il devrait être:

<?php 
session_start(); 
?> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
</head> 
<body> 

<?php 

    if (!(isset($_SESSION["test_message"]))) 
    echo "Test message is not set"; 
    else 
    echo $_SESSION["test_message"]; 

var_dump($_SESSION); 

    session_destroy(); 
?> 

</body> 
</html> 

session_start() devrait être en haut de chaque fichier dans lequel vous devez accéder aux fonctions de session .

EDIT:

Vous devriez vraiment utiliser session_write_close avant de rediriger vers une autre page.

premier fichier:

<?php 
session_start(); 

$_SESSION["test_message"] = "Hello, world"; 

session_write_close(); 
header("Location: http://localhost/file_2.php"); 
?> 
+0

session_start(); en haut de file_2? Pourquoi pas le début de file_1? C'est là que la session commence et elle définit la variable de session que fiel_2 récupérera. – Mawg

+1

Il doit être dans les deux scripts. session_start() n'initialise pas une nouvelle session, elle lance le mécanisme de gestion de session de php que vous devez faire (au moins) une fois dans chaque instance de php dans laquelle vous voulez utiliser les données de session. Nouvelle requête, nouvelle instance de php, new session_start(). – VolkerK

+0

ok, deux d'entre vous le dites - j'ai +1 vous deux. MAIS cela ne fonctionne toujours pas – Mawg

1

numéro de session peut être fixé dans Xampp 7.1.6 faire le changement suivant dans php.ini Ligne # 1403

session.auto_start = 1