2012-06-22 10 views
9

Jaki jest najlepszy sposób, aby użytkownik był zalogowany na stronie z PHP, dopóki nie zamknie przeglądarki?Sesja PHP lub plik cookie

Pierwszy i najbardziej popularny sposób to przejść z $_SESSION. Drugi to przekazanie zera jako trzeciego argumentu funkcji setcookie: setcookie(name, value, 0, domain);

+5

sesja faktycznie wykorzystuje cookies do przechowywania SID –

+1

@AlvinWong wiem, ale moje pytanie jest, co lepiej jest użyć w PHP – treng

Odpowiedz

18

Jak sesji PHP faktycznie przechowuje SID przez ciasteczka (oczywiście można stosować inne sposoby ustawiania SID jeśli chcesz), nie będzie dużej różnicy, gdy po prostu korzystania z nich.

Główną różnicą jest bezpieczeństwo, ponieważ jeśli używasz plików cookie bezpośrednio klienci mogą je zobaczyć i/lub edytować samodzielnie, ale dla sesji dane są przechowywane po stronie serwera, więc klient nie może uzyskać dostępu bezpośrednio.

Jeśli dane dotyczą tylko tej sesji, preferuję sesję.

Uwaga: jeśli używasz wielu serwerów do równoważenia obciążenia, powinieneś być bardzo ostrożny, ponieważ dane sesji są domyślnie przechowywane lokalnie na serwerze. Możliwe jest udostępnianie danych sesji na wielu serwerach, ale jest to beyond the scope of this question. Alternatywnie możesz przechowywać dane w bazie danych.

+2

możesz nadal używać sesji w wielu serwerach env. poprzez przechowywanie sesji w memcache (http://php.net/manual/en/memcached.sessions.php) – Rizon

3

Sesja jest przeznaczona do tego celu, więc chciałbym to zrobić.

3

"Sesje nie polegają na tym, że użytkownik zezwala na cookie, ale działają jak token umożliwiający dostęp i przekazywanie informacji, gdy użytkownik ma otwartą przeglądarkę. Problem z sesjami polega na tym, że po zamknięciu przeglądarki tracisz także Jeśli więc masz witrynę wymagającą logowania, nie można jej zapisać jako sesji takiej, jaką może być plik cookie, a użytkownik będzie musiał ponownie się zalogować za każdym razem, gdy go odwiedza.

Możesz oczywiście uzyskaj to, co najlepsze z obu światów! Gdy już wiesz, co robi, możesz użyć kombinacji plików cookie i sesji, aby Twoja witryna działała dokładnie tak, jak chcesz. "

http://php.about.com/od/learnphp/qt/session_cookie.htm

1

Chciałbym użyć $ _SESSION jako łatwiejsze. : P W każdym razie, jak wspomniano powyżej, zadecyduj o swoim przypadku. Jeśli chcesz, aby użytkownik był zalogowany przez jakiś czas, nawet po zamknięciu przeglądarki, użyj cookie, ale poprawnie. Może to stanowić zagrożenie dla bezpieczeństwa! else użyj sesji.

4

Proponuję, aby przejść do sesji PHP. To proste i nie musisz sam zajmować się plikami cookie.

Poniżej znajduje się kod, który naprawdę zniszczy sesję skopiowaną z example podaną w podręczniku PHP.

// Initialize the session. 
// If you are using session_name("something"), don't forget it now! 
session_start(); 

// Unset all of the session variables. 
$_SESSION = array(); 

// If it's desired to kill the session, also delete the session cookie. 
// Note: This will destroy the session, and not just the session data! 
if (ini_get("session.use_cookies")) { 
    $params = session_get_cookie_params(); 
    setcookie(session_name(), '', time() - 42000, 
     $params["path"], $params["domain"], 
     $params["secure"], $params["httponly"] 
    ); 
} 

// Finally, destroy the session. 
session_destroy(); 

O zapytanie:

Co lepiej użyć do utrzymania użytkownik zalogowany, dopóki nie zamknie swoją przeglądarkę?

Nie ma niezawodnego sposobu określania, kiedy użytkownik zamknął przeglądarkę. Jednym ze sposobów jest ciągłe wysyłanie małych żądań AJAX do serwera. Jeśli nie widzisz żądań przez dłuższy czas, zniszcz sesję.

Innym podejściem jest odsłuchanie rozładowania okna DOM i wysłanie żądania do serwera w celu zniszczenia sesji.

3

Należy użyć $ _SESSION

Bo jeśli pliki cookie są włączone, a następnie ciasteczko zostanie wykorzystane w każdym razie dla identyfikatora sesji PHP. Zatem pisanie innego cookie nie jest optymalne.

Jedynym powodem, dla którego chcesz użyć pliku cookie zamiast sesji, jest to, czy chcesz zadbać o równoważenie obciążenia. Jeśli więc masz 2 serwery i jeden z nich zawiedzie, sesja na tym serwerze zostanie utracona. Teraz zalogowany użytkownik (który miał sesję na serwerze 1) zostanie poproszony o ponowne zalogowanie. Ale jeśli zamiast tego miałby ciasteczko, nie byłby proszony o ponowne zalogowanie.

2

cookie jest ograniczony dla każdej domeny można ustawić 20 ciasteczka i maksymalny rozmiar każdego jest 4KB

Powiązane problemy