Pliki cookie a sesje


189

Zacząłem używać PHP kilka miesięcy temu. W celu stworzenia systemu logowania do mojej strony internetowej czytam o ciasteczkach i sesjach oraz ich różnicach (ciasteczka są przechowywane w przeglądarce użytkownika i sesjach na serwerze). W tym czasie wolałem pliki cookie (a kto nie lubi ciasteczek ?!) i po prostu powiedziałem: „kogo to obchodzi? Nie mam nic dobrego do przechowywania ich na moim serwerze”, więc zacząłem używać plików cookie do mój projekt licencjacki. Jednak po zrobieniu dużej części mojej aplikacji usłyszałem, że w konkretnym przypadku przechowywania identyfikatora użytkownika sesje są bardziej odpowiednie. Zacząłem więc myśleć o tym, co powiedziałbym, gdyby jury zapytało mnie, dlaczego użyliście ciasteczek zamiast sesji? Mam właśnie ten powód (że nie muszę przechowywać wewnętrznych informacji o użytkowniku).? czy to coś więcej?
Czy możesz mi powiedzieć o zaletach / wadach używania plików cookie do przechowywania identyfikatora użytkownika?

Dziękujemy za wszystko w StackOverflow!


2
Obie metody przechowują dane . Pliki cookie robią to po stronie klienta, tj. W pamięci urządzeń użytkowników. Sesje są sprytnym „rozszerzeniem”, ponieważ przechowują tylko unikalny identyfikator po stronie klienta i wszystkie rzeczywiste dane po stronie serwera. Po otrzymaniu unikalnego identyfikatora z pliku cookie klienta wiedzą, jakie dane załadować na serwer. W większości przypadków potrzebne będą sesje. Nawiasem mówiąc, możesz zarządzać zarówno za pomocą github.com/delight-im/PHP-Cookie w bardziej nowoczesny sposób.
caw

Nawiasem mówiąc, rdzeń WordPress porzucił korzystanie z sesji kilka lat temu i teraz używa wyłącznie plików cookie . Ciekawy. Zastanawiam się, czy zrobili to, aby ułatwić wdrażanie na zestawie serwerów z równoważeniem obciążenia i / lub ograniczyć losowe wylogowanie z powodu wyrzucania elementów bezużytecznych.
Simon East

Odpowiedzi:


230

Koncepcja polega na przechowywaniu trwałych danych podczas ładowania strony dla użytkownika sieci. Pliki cookie przechowują go bezpośrednio na kliencie. Sesje wykorzystują pliki cookie jako swego rodzaju klucz do powiązania z danymi przechowywanymi po stronie serwera.

Preferowane jest używanie sesji, ponieważ rzeczywiste wartości są ukryte przed klientem, a użytkownik kontroluje, kiedy dane wygasają i stają się nieprawidłowe. Gdyby wszystko opierało się na plikach cookie, użytkownik (lub haker) mógłby manipulować danymi dotyczącymi plików cookie, a następnie odtwarzać żądania w witrynie.

Edycja: Nie sądzę, że korzystanie z plików cookie ma inną zaletę niż prostota. Spójrz na to w ten sposób ... Czy użytkownik ma powód, aby znać swój identyfikator #? Zazwyczaj powiedziałbym „nie”, użytkownik nie potrzebuje tych informacji. Udzielanie informacji powinno być ograniczone w zależności od potrzeby. Co się stanie, jeśli użytkownik zmieni swój plik cookie na inny identyfikator, jak zareaguje Twoja aplikacja? To ryzyko bezpieczeństwa.

Zanim sesje stały się modne, w zasadzie miałem własną implementację. Przechowałem unikalną wartość pliku cookie na kliencie i moje trwałe dane w bazie danych wraz z tą wartością pliku cookie. Następnie na żądanie strony dopasowałem te wartości i miałem moje trwałe dane, nie pozwalając klientowi kontrolować, co to jest.


29
@JiminyCricket Nie sądzę, że to prawda ... jeśli tak, nikt nie użyłby zmiennych sesji do przechowywania aktualnie zalogowanego użytkownika - i wszyscy tak robią. Byłoby to ogromne ryzyko bezpieczeństwa. Jestem całkiem pewien, że zazwyczaj identyfikator sesji jest zapisywany jako plik cookie na komputerze klienckim, a następnie jest dopasowywany po stronie serwera z danymi sesji. Serwer zazwyczaj nie kontroluje sesji za pomocą adresu IP, a raczej poprzez wartość pliku cookie.
John M.,

1
Niedawno zacząłem ponownie używać tylko plików cookie, ponieważ sesje powodują, że strony nie ładują się, jeśli z tej samej sesji jest obecnie wykonywana kolejna, chyba że zapiszesz każdą stronę, session_write_close();gdy jej potrzebujesz. Utworzenie własnego unikalnego identyfikatora i dopasowanie do zwykłych plików cookie nie było trudne i sprawia, że ​​wszystkie strony są ładne i szybkie.
Brian Leishman,

Czy uważasz, że powinienem używać sesji do uwierzytelnienia? Czy wiąże się to z jakimś ryzykiem bezpieczeństwa? Co powiesz na hakera, który próbuje zmienić swój identyfikator sesji, jak zareaguje serwer (zakładając, że odgadnięty identyfikator sesji jest prawidłowy)?
O-BL,

Użyj sesji, a następnie 2FA, ponieważ sesję można przejąć.
Zakir Sajib

120

Podstawowe pomysły na rozróżnienie tych dwóch.

Sesja:

  1. IDU jest przechowywane na serwerze (tj. Po stronie serwera)
  2. Bezpieczniej (z powodu 1)
  3. Wygaśnięcia nie można ustawić, zmienne sesji wygasną, gdy użytkownicy zamkną przeglądarkę. (obecnie jest przechowywany domyślnie przez 24 minuty w php)

Ciasteczka:

  1. IDU jest przechowywane w przeglądarce internetowej (tj. Po stronie klienta)
  2. Niezbyt bezpieczne, ponieważ hakerzy mogą uzyskać i uzyskać informacje (z powodu 1)
  3. Wygasanie można ustawić ( więcej informacji znajduje się w setcookies () )

Sesja jest preferowana, gdy konieczne jest przechowywanie krótkoterminowych informacji / wartości, takich jak zmienne do obliczeń, pomiarów, zapytań itp.

Pliki cookie są preferowane, gdy trzeba przechowywać długoterminowe informacje / wartości, takie jak konto użytkownika (aby nawet po zamknięciu komputera na 2 dni jego konto nadal będzie zalogowane). Nie mogę wymyślić wielu przykładów plików cookie, ponieważ nie są one stosowane w większości sytuacji.


6
Pamiętaj: to NIE jest dobra odpowiedź. Zaczyna się całkiem dobrze, ale myli i kończy się dezinformacją. To nie jest wyjaśnienie sesji vs. ciasteczek. Wyjaśnienie ciasteczka sesji vs. sesja + sesja. Same pliki cookie nie są preferowane z podanych powodów. Sesje + sesyjne pliki cookie są preferowane z podanych powodów.
markus

Kolejnym błędem jest to, że masz wpływ na czas życia sesji poprzez konfigurację PHP.
markus

1
Sesje nadal ustawiają plik cookie w przeglądarce użytkownika, więc to wyjaśnienie po stronie serwera i klienta jest
niepoprawne

wygasanie sesji może być łatwo ustawione przez dowolną aplikację. Trzeci punkt jest błędny. Ponadto zapomniałeś ilość danych, które mogą być przechowywane w pliku cookie vs. sesja. To ważniejszy punkt
saran3h

1
Co oznacza IDU?
Simon East

45
SESSIONS ENDS WHEN USER CLOSES THEIR BROWSER,

COOKIES END DEPENDING ON THE LIFETIME YOU SET FOR IT. SO THEY CAN LAST FOR YEARS

To jest główna różnica w twoim wyborze,

Jeśli chcesz, aby identyfikator był zapamiętywany przez długi czas, musisz użyć plików cookie; w przeciwnym razie, jeśli chcesz, aby witryna rozpoznała użytkownika tylko podczas tej wizyty, sesje są właściwym rozwiązaniem.

Sesje są przechowywane w pliku wygenerowanym przez serwer php. Aby zapamiętać, który plik jest dla którego użytkownika, php ustawi również plik cookie w przeglądarce użytkownika, który przechowuje ten identyfikator pliku sesji, więc podczas następnej wizyty php przeczyta ten plik i przeładuje sesję.

Teraz php domyślnie czyści sesje co interwał, a także konwencja nazewnictwa sesji powoduje, że wygasa automatycznie. Ponadto przeglądarki nie zachowują pliku cookie, który przechowuje identyfikator sesji po zamknięciu przeglądarki lub wyczyszczeniu historii.

Ważne jest, aby pamiętać, że obecnie przeglądarki obsługują także inny rodzaj silników pamięci, takich jak LocalStorage, SessionStorage i inne silniki webdb, których kod javascript może używać do zapisywania danych na twoim komputerze, aby cię zapamiętać. Jeśli na przykład otworzysz konsolę javascript na Facebooku i wpiszesz „localStorage”, zobaczysz wszystkie zmienne, których Facebook używa do zapamiętywania cię bez plików cookie.


16
W rzeczywistości sesja domyślnie trwa do momentu zamknięcia przeglądarki przez użytkownika, ALE można to zmienić w pliku php.ini, zmieniając wartość 0 w session.cookie_lifetime = 0 na liczbę sekund, przez które sesja ma trwać, lub przez using session_set_cookie_params ().
DOK

1
Dalsze pomocne informacje, takie pytanie, które dają wiele odpowiedzi .. świetnie, jeszcze raz dziękuję DOK!
Nadjib Mami,

1
Należy również pamiętać, że pliki sesji mogą tworzyć pojedynczy punkt awarii. Kiedy nawet najmniejszy atak w stylu dos odbywa się za pośrednictwem serwera proxy, przełącznika ip lub zombie, plik sesji jest tworzony na dysku twardym serwera lub ssd. Jeśli nie możesz nadążyć za czytaniem zapisów, twoja strona ulegnie awarii.
Shawn E Carter

może ktoś oświadczyć: „SESJE ZAKOŃCZĄ SIĘ, GDY UŻYTKOWNIK ZAMKNIJ SWOJĄ PRZEGLĄDARKĘ” 1. co jeśli użytkownik nawiguje awya ze strony .. a następnie wraca bez zamykania przeglądarki. 2. co jeśli mają kilka otwartych okien / kart przeglądarki wskazujących na tę samą stronę? w tej sytuacji niektóre aplikacje internetowe są zdezorientowane, ale nie wiem, jakiego rodzaju plików cookie używają.
jcansell

1
@jcansell dobrze, plik cookie nie zostanie pomylony przez wiele kart lub nawigację, w takim przypadku najprawdopodobniej te aplikacje internetowe wykorzystywały przechowywanie lokalne / przechowywanie sesji do zapisywania danych za pomocą javascript
Zalaboza

20

zapisując #ID jako plik cookie w celu rozpoznania zalogowanych użytkowników, w rzeczywistości wyświetlasz dane użytkownikom, którzy nie są z nimi powiązani. Ponadto, jeśli strona trzecia spróbuje ustawić losowe identyfikatory jako dane cookie w swojej przeglądarce, będzie w stanie przekonać serwer, że jest użytkownikiem, podczas gdy tak naprawdę nie jest. To brak bezpieczeństwa.

Użyłeś plików cookie i jak powiedziałeś, ukończyłeś już większość projektu. poza tym ciasteczko ma przywilej pozostawania przez długi czas, podczas gdy sesje kończą się szybciej. Dlatego sesje nie są odpowiednie w tym przypadku. W rzeczywistości wiele znanych i popularnych stron internetowych i usług korzysta z plików cookie i możesz pozostać zalogowany przez długi czas. Ale jak wykorzystać ich metodę, aby stworzyć bezpieczniejszy proces logowania?

oto pomysł: możesz pomóc w sposobie korzystania z plików cookie: jeśli używasz losowych kluczy zamiast identyfikatorów do rozpoznania zalogowanych użytkowników, po pierwsze, nie ujawniasz swoich podstawowych danych losowym użytkownikom, a po drugie, jeśli uważasz, że losowe klucz wystarczająco duży, Trudno będzie odgadnąć klucz lub utworzyć losowy. na przykład możesz zapisać klucz o długości 40, taki jak ten w przeglądarce użytkownika: „KUYTYRFU7987gJHFJ543JHBJHCF5645UYTUYJH54657jguthfn”, a prawdopodobieństwo, że ktoś utworzy dokładny klucz i będzie udawać, że jest kimś innym, będzie mniejsze.


1
Ładne wyjaśnienie. Używam GUID w tokenie do rozpoznawania poszczególnych użytkowników.
Karthik

17

Krótka odpowiedź

Reguły uporządkowane według priorytetu:

  • Zasada 1. Nigdy nie ufaj wkładowi użytkownika: pliki cookie nie są bezpieczne. Używaj sesji do poufnych danych.
  • Zasada 2. Jeśli trwałe dane muszą pozostać po zamknięciu przeglądarki przez użytkownika, użyj plików cookie.
  • Zasada 3. Jeśli trwałe dane nie muszą pozostać po zamknięciu przeglądarki przez użytkownika, użyj sesji.
  • Zasada 4. Przeczytaj szczegółową odpowiedź!

Źródło: https://www.lucidar.me/en/web-dev/sessions-or-cookies/


Szczegółowa odpowiedź

Ciasteczka

  • Pliki cookie są przechowywane po stronie klienta (w przeglądarce użytkownika).
  • Pliki cookie nie są bezpieczne: odczytywanie i zapisywanie zawartości plików cookie jest dość łatwe.
  • Podczas korzystania z plików cookie musisz powiadomić odwiedzających zgodnie z prawem europejskim (RODO).
  • Wygaśnięcie można ustawić, ale użytkownik lub przeglądarka może to zmienić.
  • Użytkownicy (lub przeglądarka) mogą (ustawić na) odmowę używania plików cookie.

Sesje

  • Sesje są przechowywane po stronie serwera.
  • Sesje wykorzystują pliki cookie (patrz poniżej).
  • Sesje są bezpieczniejsze niż pliki cookie, ale nie są niezniszczalne.
  • Data wygaśnięcia jest ustawiana w konfiguracji serwera (na przykład php.ini).
  • Domyślny czas ważności wynosi 24 minuty lub gdy przeglądarka jest zamknięta.
  • Wygaśnięcie jest resetowane, gdy użytkownik odświeży lub załaduje nową stronę.
  • Użytkownicy (lub przeglądarka) mogą (ustawiać) na odmowę używania plików cookie, a zatem sesji.
  • Z prawnego punktu widzenia musisz również powiadomić odwiedzających o plikach cookie, ale brak precedensu nie jest jeszcze jasny.

Właściwy wybór

Sesje używają plików cookie! Dane sesji są przechowywane po stronie serwera, ale identyfikator UID jest przechowywany po stronie klienta w pliku cookie. Pozwala serwerowi dopasować danego użytkownika do odpowiednich danych sesji. UID jest chroniony i trudny do zhakowania, ale nie jest niezniszczalny. W przypadku wrażliwych działań (zmiana adresu e-mail lub resetowanie hasła) nie polegaj na sesjach ani na plikach cookie: poproś o hasło użytkownika, aby potwierdzić działanie.

Wrażliwe dane nigdy nie powinny być przechowywane w plikach cookie (wiadomości e-mail, szyfrowane hasła, dane osobowe ...). Pamiętaj, że dane są przechowywane na obcym komputerze, a jeśli komputer nie jest prywatny (komputery klasowe lub publiczne), ktoś inny może potencjalnie odczytać zawartość plików cookie.

Pamiętaj-me dane muszą być przechowywane w plikach cookie, w przeciwnym razie dane zostaną utracone, gdy użytkownik zamknie przeglądarkę. Nie zapisuj jednak hasła ani danych osobowych użytkownika w pliku cookie „pamiętaj o mnie”. Przechowuj dane użytkownika w bazie danych i połącz je z zaszyfrowaną parą identyfikatora / klucza przechowywanego w pliku cookie.

Po rozważeniu poprzednich rekomendacji ostatecznie pojawia się następujące pytanie, które pomaga wybrać między plikami cookie a sesjami:

Czy trwałe dane muszą pozostać, gdy użytkownik zamknie przeglądarkę?

  • Jeśli odpowiedź jest twierdząca , użyj plików cookie .
  • Jeśli odpowiedź brzmi „ nie” , użyj sesji .


10

Osobiście używam zarówno plików cookie, jak i sesji.

Pliki cookie są używane tylko wtedy, gdy użytkownik kliknie pole wyboru „zapamiętaj mnie” . a także pliki cookie są szyfrowane, a dane tylko deszyfrowane na serwerze. Jeśli ktoś spróbuje edytować pliki cookie, nasz deszyfrator może go wykryć i odrzucić żądanie.

Widziałem tak wiele witryn, w których dane logowania są przechowywane w plikach cookie , każdy może po prostu zmienić identyfikator użytkownika i nazwę użytkownika w plikach cookie, aby uzyskać dostęp do dowolnego konta.

Dzięki,


2

Sesja i Cookie to nie to samo.

Sesja służy do przechowywania informacji ze stron internetowych. Zwykle strony internetowe nie mają żadnych pamięci do przechowywania tych informacji. Ale za pomocą możemy zapisać niezbędne informacje.

Ale Cookie służy do identyfikacji użytkowników. Za pomocą plików cookie możemy przechowywać dane. Jest to niewielka część danych, które będą przechowywane w przeglądarce internetowej użytkownika. Dlatego za każdym razem, gdy użytkownik przejdzie następnym razem, przeglądarka odeśle informacje o pliku cookie na serwer w celu uzyskania poprzednich działań.

Kredyty: sesja i pliki cookie


Co jeśli użytkownik wyłączył pliki cookie? Jak pliki cookie identyfikują użytkownika?
SohailRajput,

1

Sesje umożliwiają przechowywanie poszczególnych informacji, tak jak w przypadku plików cookie, ale dane są przechowywane na serwerze zamiast na kliencie.


0

Jak powiedzieli inni, sesje są sprytne i mają większą zaletę ukrywania informacji przed klientem.

Ale Cookie nadal ma co najmniej jedną zaletę , możesz uzyskać dostęp do plików cookie z Javascript (na przykład ngCookies ). W sesji PHP nie można uzyskać do niej dostępu poza skryptem PHP.


1
Możesz ... Nie bezpośrednio, oczywiście, możesz jednak uzyskać do niego dostęp za pośrednictwem żądania ajax do skryptu, który zwraca dane sesji. Ale nie jestem pewien, czy powinieneś.
10000

0

Wybiorę sesję, przede wszystkim sesja jest bezpieczniejsza niż pliki cookie, pliki cookie to dane strony klienta, a sesja to dane strony serwera. Pliki cookie służą do identyfikacji użytkownika, ponieważ są to małe fragmenty kodu wbudowane w mój serwer w przeglądarce komputera użytkownika. Z drugiej strony Sesja pomaga zabezpieczyć twoją tożsamość, ponieważ serwer WWW nie wie kim jesteś, ponieważ adres HTTP zmienia stan 192.168.0.1 na 765487cf34ert8ded… lub coś innego za pomocą metod GET i POST. Sesja przechowuje dane użytkownika w unikalnej sesji identyfikatora, której nawet identyfikator użytkownika nie może się ze sobą zgadzać. Sesja przechowuje informacje o jednym użytkowniku na wszystkich stronach jednej aplikacji. Pliki cookie wygasają za pomocą setcookies (), podczas gdy wygasanie sesji nie jest ustawione, wygasa, gdy użytkownik wyłączy przeglądarki.


0

Sesja to grupa informacji na serwerze, która jest powiązana z informacjami o plikach cookie. Jeśli używasz PHP, możesz sprawdzić sesję. zapisz _ lokalizację ścieżki i faktycznie „zobacz sesje”. Plik cookie to fragment danych wysyłanych i zwracanych od klientów. Pliki cookie są często używane w celu ułatwienia sesji, ponieważ informują serwer, który klient obsłużył daną sesję. Są na to inne sposoby (magia ciągu zapytań itp.), Ale najprawdopodobniej pliki cookie są do tego najczęściej używane.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.