2015-07-14 17 views
6

Walczyłem z tym przez wiele godzin, ale nie mogę go uruchomić. Kiedy wykonuję przekierowanie na inną stronę PHP, wszystkie zmienne sesji są zerowe. Jestem na serwerze xampp.Indeks sesji PHP nieokreślony po przekierowaniu nagłówka?

session.php

<?php 
    session_start(); 
    if(isset($_POST['submitted']))                       
    { 
     $_SESSION['first_name'] = "MAX"; 
     var_dump($_SESSION); 
     header("Location: http://localhost:8080/secure login/session2.php");  
     die(); 
    } 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> 
<head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859- 1" /> 
    <title>You Logged In</title> 
</head> 
<body> 
    <form action="session.php" method="post"> 
     <div align="center"><input type="submit" name="submit" value="Login" /></div> 
    <input type="hidden" name="submitted" value="TRUE" /> 
    </form> 
</body> 
</html> 

session2.php

<?php 
    session_start(); 
?> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> 
<head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 
    <title>You Logged In</title> 
</head> 
<body> 
    <div id="main"> 
     <?php 
      echo '<pre>' . print_r($_SESSION, TRUE) . '</pre>'; 
      echo 'You are welcome to session2.php <br></br>'; 
      if (isset($_SESSION['first_name'])) 
      { 
       echo $_SESSION['first_name'] . "<br></br>"; 
      } 
      else 
      { 
       echo "Your session doesn't exist. I hate php <br></br>"; 
       echo $_SESSION['first_name']; 
      } 
     ?> 
    </div> 
</body> 
</html> 

Sesja nie zapisać, a wyjście jest;

Array 
(
) 
You are welcome to session2.php 
Your session doesn't exist. I hate php 
Notice: Undefined index: first_name in C:\xampp\htdocs\secure login\session2.php on line 28 

Próbowałem innych rzeczy, takich jak zmiany, gdzie zmienne sesji są zapisywane z xampp/tmp do innego katalogu, ale to nie rozwiązało problemu. Mam program, którego potrzebuję do zalogowania się użytkownika podczas przekierowania, ale zablokowało to mnie na więcej niż jeden dzień.

UPDATE:

Przestrzeń między katalogów nie był problem, to tymczasowo rozwiązać ten problem, ale to dlatego, że nie było w pamięci podręcznej dla nowego katalogu jeszcze. W każdym razie, przez kilka kolejnych dni debugowałem i zdałem sobie sprawę, że uruchomiłem dwa programy na moim lokalnym hoście. Obie używały sesji, więc jeśli jedna zakończy sesję, to również kończy sesję dla drugiej, ponieważ localhost jest jak nazwa domeny i istnieje tylko jedna sesja. W szczególności, logout.php z mojego innego programu nie niszczy sesji, ale raczej pomieszał ją, bo musisz usunąć pamięć podręczną przeglądarki, aby je anulować. Opróżniam tablicę sesji, niszczę sesję i niszczę ciasteczko, to był problem, więc nie mogłem się ponownie zalogować. Jedyne, co musiałem zrobić, to zniszczyć tylko sesję;

Patrz ->Killing off Global Session Variable as a logout button

+1

Ten kod działa dla mnie tak, jak jest (cóż, nie jestem na lokalnym hoście, więc musiałem to zmienić, ale poza tym wszystko działa) – Rasclatt

+0

Zobacz [link] (http://www.tutorialspoint.com/php/php_sessions.htm) – Bugfixer

+0

@Matt dathew, jaki jest twój URL "http: // localhost: 8080/secure login/session2.php" co oznacza ? to "bezpieczne logowanie" to tylko przykładowe słowo - jaki jest twój absolutny URL "session.php"? –

Odpowiedz

3

Wydaje się, masz problem, bo trzeba spację w nazwie secure login

localhost:8080/secure%20login/session.php 

Więc spróbuj zmienić nazwę z podkreślenia secure_login a także zmienić kod

<?php 
    session_start(); 
    if(isset($_POST['submitted']))                       
    { 
     $_SESSION['first_name'] = "MAX"; 
     var_dump($_SESSION); 
     header("Location: http://localhost:8080/secure_login/session2.php");  
     die(); 
    } 
?> 
+1

DZIĘKI DUŻO. To zadziałało, na początku nie zauważyłem, że włączyłeś "_". Zawarłem to i zadziałało. –

+0

Należy również zauważyć, że sesje php nie zawsze działają. To zadziałało dla mnie, ale przestałem działać 3 godziny później, kiedy sprawdziłem to ponownie. –

2

Najprawdopodobniej ze względu na wezwanie die(), myślę, że nie powoduje to napisać sesję.

Wypróbuj przed nim session_write_close();.

2

Zmiana ta

<?php 
    session_start(); 
    if(isset($_POST['submitted'])) 
    { 
     $user = $_SESSION['first_name'] = "MAX"; 

     if(isset($user)) 
     { 
      header("Location: http://localhost:8080/secure login/session2.php"); 
     } 
     else 
     { 
      header("Location: ");//index page 
     } 
    } 
?> 

W $user = $_SESSION['first_name'] = "MAX";

pierwszy $_SESSION['first_name'] = "MAX"; wykona, wtedy wynik będzie przypisany do $user. tak w isset($user) to sprawdzić, czy ustawiony

+0

Może zechcesz dostosować to '$ user = $ _SESSION ['first_name'] =" MAX ";' –

+0

Twoje rozwiązanie przekierowuje mnie na następną stronę, ale wynik pozostaje taki sam. $ user i $ _SESSION nie są ustawione na session2.php. Powiadom mnie, jeśli to zadziałało. –

2

Po pierwsze, sprawdź czy wszystkie białe spacje przed rozpoczęciem tag <?php w session.php i session2.php pliku.

Następnie usuń var_dump($_SESSION); z session.php.

i zmienić nazwę folderu, aby secure_login

+0

Tak, sprawdziłem to i działa. Zmień nazwę folderu na secure_login. To może być powód. – Chayan

Powiązane problemy