2009-07-16 5 views
6

Mam plik szablonu, który zawiera cały mój nagłówek, stopkę i informacje ogólne. Zawiera odpowiednią treść dla bieżącej strony (dwuetapowy wzorzec widoku).Zmienne sesji PHP - znikają i pojawiają się ponownie

Próbuję skonfigurować system logowania przy użyciu zmiennych sesji PHP. Mogę ustawić zmienną i czasami działają, ale czasami znikają. Kliknięcie linków czasami spowoduje ich powrót.

My site

Logowanie z

nazwa użytkownika: test hasło: test

Istnieje var_dumps z session_id i $_SESSION na szczycie.

Kliknij Strona główna. Jeśli zmienne sesji znikną, kliknij dom (może to zająć nawet 10 razy), aby zobaczyć informacje o sesji. Kliknij drugą nawigację, a czasami informacje o sesji kręcą się wokół, a czasami nie.

Oto kod sesji na górze mojego pliku szablonu.

<?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); 

Używam PHP5.

Odpowiedz

4

Jeśli używasz Startlogic (wydaje ci ? są) za hosting, Próbowałeś robić to, co mówią w ich FAQ: http://www.startlogic.com/knowledgebase/read_article.bml?kbid=600

wskazują one następująco:

Aby uruchomić sesje PHP, obejmują następujący kod na górze każdego skryptu PHP , który używa sesji: ścieżka_save_path ("Twój katalog domowy ścieżka"/cgi-bin/tmp); session_start();

Może to pomoże? Szczególnie, jeśli używają jakiegoś systemu równoważenia obciążenia, który salda/tmp, ale nie katalog domowy?

+0

Dzięki. Nigdy nie przyszło mi do głowy, że może to być sprawa hostingu. Teraz mogę odłożyć cały kod, który wyjąłem próbując uprościć mój problem. – Emily

+0

Cóż, to był interesujący problem ^^ Miłej zabawy :-) –

2

Jeśli korzystasz z konfiguracji równoważenia obciążenia, może być tak, że tylko 1 z N serwerów ma prawidłowe dane sesji.

Domyślnie dane sesji są przechowywane w systemie plików.
Na sesję plik jest zapisywany w/tmp/i zaczyna się od "sess", po którym następuje identyfikator_sesji

1

Jesteś absolutnie pozytywny, że nigdy wcześniej nic nie zostało wywołane? Wiem, że session_start() modyfikuje nagłówki, a poza tym nie wiem, dlaczego to nie działa.

Śmiało i włączyć raportowanie błędów na początku skryptu, tuż przed session_start() rozmowy i zobacz, w jaki sposób, który pomaga śledzić to w dół:

error_reporting(E_ALL^E_NOTICE); 
ini_set('display_errors',1); 
session_start() 
Powiązane problemy