2009-10-16 8 views
5

Moja sesja wydaje się być poprawna jedynie w bieżącym oknie/karcie. Wydaje się również, że szybko się skończyło. Herezje jak jestem obecnie próbuje zrobić:Zend Framework rememberMe() nie wydaje mi się pamiętać

Jest to w moim kontrolera logowanie:

$adapter = $this->getAuthAdapter($data); 
$auth = Zend_Auth::getInstance(); 
$result = $auth->authenticate($adapter); 

if (!$result->isValid()) { 
    $this->view->err = "Invalid username or password.<br/>Please try again."; 
    return $this->render('index'); // re-render the login form 
} 

Zend_Session::rememberMe(60*60*24*7*4); 

I to jest w moim bootstrap:

Zend_Session::start(); 

Jestem stosunkowo nowy w niektórych z tych rzeczy, więc trzymajcie mnie! Każda pomoc będzie wielce ceniona.

Odpowiedz

3

Oto, co się dzieje. Ta strona internetowa znajdowała się na serwerze współużytkującym folder sesji z inną witryną na serwerze. Mimo że zwiększyłem czas życia sesji dzięki ini_set, moje sesje wciąż były usuwane przez drugą aplikację.

Aby rozwiązać ten problem, wystarczy ustawić session.save_path w nowym folderze. Problem rozwiązany!

1

Patrząc przez źródło Zend_Session The Twój na zawsze() metoda zwraca rememberUntil(), która zwraca wbudowany session_set_cookie_params metoda() w PHP

Więc może chcesz sprawdzić swoje wartości php.ini dla session.cookie_lifetime. Jeśli nie jest 0, wówczas Zend_Session :: rememberMe() byłoby bezużyteczne, chyba że wartość jest mniejsza niż session.cookie_lifetime. W takim przypadku warto ustawić go na 0 w pliku php.ini lub w aplikacji przy użyciu funkcji ini_set(), jak wskazano w pierwszym komentarzu na temat session.cookie_lifetime man page.

+0

Hi Mark, przepraszam za opóźnioną odpowiedź. Nie myślałem, że zajrzę tutaj za kilka dni. cookie_lifetime jest w rzeczywistości ustawiony na 0. Czytałem, że rememberMe musi być wywołany przed session_start(), aby session_set_cookie_params mógł ustawić czas życia. Jednak czytałem również, że zend_session :: start() powinien przejść w bootstrap, gdzie jest wywoływany przed uruchomieniem skryptu logowania i wykonuje funkcję rememberMe(). jakieś pomysły? – Brian

+0

Wykonaj zdjęcie, przyklej wywołanie rememberMe zaraz po rozpoczęciu sesji. Nie może to zranić ustawiania limitu czasu, ponieważ nie jesteś jeszcze autentyczny – Mark

2

Po prostu chcę dodać, że zmienna session.save_path w .htaccess z następującym wierszem, aby działało. Widziałem odpowiedź, że zmieniłem ją w .ini, ale jest w .htaccess.

Na przykład:

php_value session.save_path /home/kaos/data/sessions/