Sesja a cookie

0
  1. Czym różni się korzystanie z sesji (tablica $_SESSION[]) od pliku cookie?
  2. Kiedy należy korzystać z cookie, a kiedy z sesji?
1

Ad1. Dane znajdujące się w sesji trzymane są po stronie serwera. Są niedostępne dla użytkownika. Dane trzymane w ciastku znajdują się w pliku na komputerze użytkownika, może je on dowolnie modyfikować.

Ad2. Cookie możesz używać jeśli nie przeszkadza Ci fakt, że użytkownik może wprowadzać dowolne zmiany w zawartości ciastka. Natomiast, jeśli chcesz np. przechowywać numer id użytkownika, który się zalogował - lepiej trzymaj to w sesji.

0

w ogóle dziwne pytanie "czym się różni" bo to dwie różne rzeczy
a sesje korzystają z ciastek

0

Innymi słowy:
Żeby utrzymać sesję generuje się ciastko z numerem sesji (żeby jakoś dostać się do danych po stronie serwera). Dane z sesji są widoczne tylko dla serwera, użytkownik nie wie co jest w sesji i nie może tego zmienić. Ciastko z sesją jest usuwane po jakimś czasie i po zamknięciu przeglądarki. Zwykłe ciastka (tj. samo ciastko sesyjne w sumie też, ale jest tam tylko losowy nr sesji) są widoczne dla użytkownika, może odczytywać ich zawartość, zmieniać, dodawać. Ciastka zwykłe usuwane są po czasie zdefiniowanym przez Ciebie (tj. ważność np. 1 tydzień), w momencie zdefniowanym przez Ciebie (po przejściu pod jakiś adres), bądź na żądanie użytkownika (czyszczenie ciastek). Mogą być też ciastka bez określonego czasu automatycznego usuwania. Dane w sesji mogą mieć teoretycznie nieskończony rozmiar, rozmiar ciastek jest ograniczony (nie znam tego ograniczenia). Ciastka wysyłane są Z KAŻDYM zapytaniem. Czy o stronę, czy o obrazek czy css-y. Dużo ciastek = większy ruch na sieci. Sesja nie generuje ruchu na sieci, tylko jedno ciastko o rozmiarze ok 50 bajtów (nazwa + 32 losowe znaki).
Ogólnie do logowania stosuje się mechanizm = sesja + ciastko zwykłe (zawierające jakieś ID logowania (w żadnym wypadku login i hasło, nawet hashowane!)), na wypadek gdyby sesja wygasła, a chcemy utrzymywać użytkownika zalogowanego nawet po wygaśnięciu sesji.

0
dzek69 napisał(a):

Ogólnie do logowania stosuje się mechanizm = sesja + ciastko zwykłe (zawierające jakieś ID logowania (w żadnym wypadku login i hasło, nawet hashowane!)), na wypadek gdyby sesja wygasła, a chcemy utrzymywać użytkownika zalogowanego nawet po wygaśnięciu sesji.

@dzek69: właściwie to czemu w takim przypadku nie zmienić parametrów ciastka sesji tak żeby wygasało po jakimś czasie zamiast przy końcu sesji przeglądarki?

poważnie pytam - mam własny session handler więc długość życia sesji na serwerze nie jest problemem
czy ciastka z określonym terminem ważności są jakoś częściej odrzucane przez przeglądarki niż standardowe sesyjne? nigdzie nie mogę znaleźć takiej informacji

jaki sens tworzenia dwóch "warstw" sesji jeśli można stworzyć jedną

i czemu ciastka sesyjne jeszcze domyślnie nie są "HttpOnly"? Jest jakiekolwiek przeciwwskazanie?

@bogdans

0

Jestem przyzwyczajony do takiego mechanizmu i wydaje mi się to ok - sesja zawiera dane krótkotrwałe - oraz przy okazji logowanie. Na niektórych danych mi nie zależy, ale chciałbym utrzymać logowanie. Zapewne masz rację i można tak zrobić. Z miłą chęcią chciałbym, żeby przeglądarka akceptowała jedynie ciastka sesyjne, ale takiej nie spotkałem.

Czemu nie są HttpOnly? Pytaj twórców PHP ;) Albo dopisz patcha i im podrzuć

1 użytkowników online, w tym zalogowanych: 0, gości: 1