Czym są sesje? Jak działają?

Dopiero zaczynam uczyć się tworzenia aplikacji internetowych, używając Pythona. Spotykam się z pojęciami "pliki cookie" i "sesje". Rozumiem pliki cookie, ponieważ przechowują pewne informacje w parze wartości klucza w przeglądarce. Ale mam małe zamieszanie dotyczące sesji, w sesji też przechowujemy dane w pliku cookie w przeglądarce użytkownika.

Na przykład - loguję się używając username='rasmus' i password='default'. W takim przypadku dane zostaną wysłane na serwer, który ma mnie sprawdzić i zalogować jeśli uwierzytelnione. Jednak podczas całego procesu serwer generuje również identyfikator sesji, który będzie przechowywany w pliku cookie w mojej przeglądarce. Teraz serwer przechowuje również ten identyfikator sesji w swoim systemie plików lub magazynie danych.

Ale bazując tylko na identyfikatorze sesji, w jaki sposób będzie mógł poznać moją nazwę Użytkownika podczas mojego późniejszego przechodzenia przez witrynę? Czy przechowuje dane na serwerze jako dict gdzie kluczem będzie ID sesji i szczegóły jak username, email itd. być wartościami?

I zaczynam się mylić. Potrzebuję pomocy.

Author: Rasmus, 2010-09-27

5 answers

Ponieważ HTTP jest bezstanowy, aby powiązać żądanie z dowolnym innym żądaniem, potrzebujesz sposobu przechowywania danych użytkownika między żądaniami HTTP.

Pliki cookie lub parametry URL ( np. jak http://example.com/myPage?asd=lol&boo=no ) są odpowiednimi sposobami transportu danych pomiędzy 2 lub więcej żądaniami. Nie są one jednak dobre, jeśli nie chcesz, aby dane były czytelne/edytowalne po stronie klienta.

Rozwiązaniem jest zapisanie tej strony serwera danych, nadanie jej " id " i niech klient tylko wie (i przekazuje z powrotem przy każdym żądaniu http) ten identyfikator. Proszę bardzo, sesje zrealizowane. Możesz też użyć klienta jako wygodnej zdalnej pamięci masowej, ale zaszyfrowałbyś Dane i zachowałbyś tajność po stronie serwera.

Oczywiście są inne aspekty do rozważenia, jak nie chcesz, aby ludzie przejmowali sesje innych, chcesz, aby sesje nie trwały wiecznie, ale wygasły, i tak dalej.

W konkretnym przykładzie id użytkownika (może to być nazwa użytkownika lub inny unikalny identyfikator w twoja baza danych użytkownika) jest przechowywana w danych sesji, po stronie serwera, po udanej identyfikacji. Następnie dla każdego żądania HTTP, które otrzymasz od klienta, identyfikator sesji (podany przez Klienta) wskaże Ci poprawne dane sesji (przechowywane przez serwer), które zawierają uwierzytelniony identyfikator użytkownika - w ten sposób Twój kod będzie wiedział, z którym użytkownikiem rozmawia.

 337
Author: Luke404,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-30 16:15:49

Proste wyjaśnienie przez analogię

Wyobraź sobie, że jesteś w banku, próbując wyciągnąć trochę pieniędzy ze swojego konta. Ale jest ciemno; brzeg jest czarny: nie ma światła i nie widać dłoni przed twarzą. Jesteście otoczeni przez kolejne 20 osób. Wszystkie wyglądają tak samo. I każdy ma ten sam głos. I każdy jest potencjalnym złym facetem. Innymi słowy, HTTP jest bezpaństwowy.

Ten bank to śmieszny Typ banku - dla dobra argumentacji oto jak to działa:

  1. czekasz w kolejce (lub on-line) i rozmawiasz z kasjerem: składasz wniosek o wypłatę pieniędzy, a następnie
  2. musisz chwilę poczekać na sofie, a 20 minut później
  3. Musisz iść i odebrać pieniądze od kasjera.
Ale jak Kasjerka odróżni cię od innych? Kasjer nie widzi cię ani nie rozpoznaje, pamiętaj, bo światła są zgaszone. Co jeśli twój kasjer da wypłatę 10 000 $na ktoś inny-nie ta osoba?! Bardzo ważne jest, aby kasjer rozpoznał Cię jako tego, który dokonał wypłaty, abyś mógł otrzymać pieniądze (lub zasoby), o które prosiłeś.

Rozwiązanie:

Kiedy po raz pierwszy pojawiasz się kasjerowi, on lub ona mówi ci coś w tajemnicy:

"kiedy kiedykolwiek mówisz do mnie", mówi Kasjerka, "najpierw powinieneś zidentyfikować siebie jako GNASHEU329 - w ten sposób Wiem, że to Ty".

Nobody else zna tajny kod.

Przykład jak wypłaciłem gotówkę:

Więc postanowiłem pójść i wyluzować się przez 20 minut, a potem poszedłem do kasjera i powiedziałem "chciałbym odebrać moją wypłatę"]} Kasjerka pyta mnie: "kim jesteś??!" "To ja, Panie George Banks!"

"udowodnij to!"

I wtedy powiem im moje hasło: GNASHEU329

"Oczywiście, Panie Banks!"

W zasadzie tak działa sesja. Pozwala na unikalne zidentyfikowany w morzu milionów ludzi. Musisz się identyfikować za każdym razem, gdy masz do czynienia z kasjerem.

Jeśli masz jakieś pytania lub są niejasne-napisz komentarz, a postaram się to wyjaśnić.

 46
Author: BKSpurgeon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-04 07:34:51

"sesja" to termin używany w odniesieniu do czasu przeglądania strony internetowej przez użytkownika. Ma on reprezentować czas między ich pierwszym przybyciem na stronę w witrynie do czasu zaprzestania korzystania z witryny. W praktyce nie można wiedzieć, kiedy użytkownik korzysta z witryny. Na większości serwerów istnieje limit czasu, który automatycznie kończy sesję, chyba że inna strona jest wymagana przez tego samego użytkownika.

Przy pierwszym połączeniu użytkownika tworzony jest jakiś identyfikator sesji (jak to się robi zależy w oprogramowaniu serwera WWW i rodzaju uwierzytelniania/logowania używanego na stronie). Podobnie jak pliki cookie, zwykle nie są one już wysyłane do adresu URL, ponieważ stanowią problem z bezpieczeństwem. Zamiast tego jest przechowywany wraz z kilkoma innymi rzeczami, które łącznie są również określane jako sesja. Zmienne sesji są jak pliki cookie - są to pary nazwa-wartość wysyłane wraz z żądaniem strony i zwracane wraz ze stroną z serwera - ale ich nazwy są zdefiniowane w sieci standard.

Niektóre zmienne sesji są przekazywane jako nagłówki HTTP . Są one przekazywane za kulisy każdego przeglądania stron, więc nie pojawiają się w przeglądarce i nie mówią wszystkim czegoś, co może być prywatne. Wśród nich są USER_AGENT lub typ przeglądarki żądającej strony, REFERRER lub strona, która połączyła się z żądaną stroną itp. Niektóre programy serwera www dodają własne nagłówki lub przesyłają dodatkowe dane sesji specyficzne dla oprogramowania serwera. Ale te standardowe są dość dobrze udokumentowane.

Mam nadzieję, że to pomoże.

 33
Author: Tim Rourke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-27 14:18:07

HTTP jest protokołem bezstanowego połączenia, czyli serwer nie może odróżnić różnych połączeń różnych użytkowników.

Stąd pochodzi plik cookie, gdy klient łączy się po raz pierwszy z serwerem, serwer generuje nowy identyfikator sesji, który później zostanie wysłany do klienta jako wartość pliku cookie. Od teraz ten identyfikator sesji będzie identyfikował to połączenie z klientem, ponieważ w każdym żądaniu HTTP będzie widział odpowiedni identyfikator sesji wewnątrz plików cookie.

Teraz dla każdego identyfikator sesji, serwer zachowuje pewną strukturę danych, która umożliwia mu przechowywanie danych specyficznych dla użytkownika, tę strukturę danych można abstrakcyjnie wywołać sesję.

 16
Author: Artem Barger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-21 19:10:50

Pomyśl o HTTP jako o osobie(a), która ma krótkotrwałą utratę pamięci i zapomina o każdej osobie, gdy tylko ta osoba zniknie z pola widzenia.

Teraz, aby pamiętać różne osoby, a robi zdjęcie tej osoby i zachowuje je. Zdjęcie każdej osoby ma numer identyfikacyjny. Kiedy ta osoba pojawi się ponownie w zasięgu wzroku, ta osoba powie jej numer identyfikacyjny do A, A znajdzie swoje zdjęcie po numerze identyfikacyjnym. I voila !!, A wie kim jest ta osoba.

To samo jest z HTTP. Cierpi na krótkotrwałą utratę pamięci. Informatyka wykorzystuje sesje do rejestrowania wszystkiego, co zrobiłeś podczas korzystania z witryny, a następnie, gdy przyjdziesz ponownie, identyfikuje cię za pomocą Plików cookie (Cookie jest jak token). Zdjęcie jest sesją tutaj, A ID jest ciasteczkiem tutaj.

 4
Author: Luv33preet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-30 11:36:52