Różnica pomiędzy sesją, a ciasteczkami

Różnica pomiędzy sesją, a ciasteczkami
V2
  • Rejestracja:około 4 lata
  • Ostatnio:około 2 miesiące
  • Postów:86
0

Cześć, chciałbym się dowiedzieć jaka jest różnica pomiędzy sesją a ciasteczkami, a właściwie co w nich przechowywać. Wiadomo że hasło czy login użytkownika lepiej przechowywać sesji ale tak poza tym to jakie dane lepiej przechowywać w sesji a jakie w ciasteczkach.

edytowany 1x, ostatnio: Riddle
ZeuberO
Ciasteczka przechowywane są przez określony czas (tak jak ustawisz), a sesja do momentu jej zerwania (default chyba 30 min). W sesji przechowuj najlepiej informacje potrzebne np. do zarządzania kontem lub zmienne, które będziesz przerzucał pomiędzy plikami, a w ciastkach np. ciemny/jasny motyw (takie rzeczy, które ułatwią użytkownikowi działanie i nie będzie musiał przez to co chwile powracać do wcześniejszych ustawień)
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 9 godzin
  • Lokalizacja:Laska, z Polski
  • Postów:10056
4

Tak na prawdę to to są dwa zupełnie różne mechanizmy które nie mają ze sobą nic wspólnego, poza tym że w obu możesz przechowywać dane, ale to równie dobrze mógłbyś zadać pytanie "sesja vs pliki" albo "sesja vs baza".

  1. Ciasteczka, czyli po prostu nagłówek o nazwie Set-Cookie jest wysyłany przez serwer do klienta, podczas requestu HTTP (np z przeglądarki). Możesz np dostać nagłówek Set-Cookie: abcdef. Następnie istnieje konwencja, że klient HTTP odsyła inny nagłówek, tym razem Cookie: abcdef do serwera. Polegając na takiej konwencji można użyć takiego nagłówka żeby zachować jakąś formę stanu pomiędzy odświeżeniem strony. Jednak należy pamiętać że to klient (np przeglądarka) ma pełną kontrolę nad tym co znajduje się w Cookie, bo wcale nie musi go odesłać albo może wysłać całkiem inny. Można ewentualnie próbować zabezpieczyć dane w cookies, np poprzez JWT, jeśli nie chcemy korzystać z innych mechanizmów.
  2. Sesja, to sposób persystencji danych na serwerze i działa to w taki sposób, że serwer zapisuje sobie w pamięci jakieś dane, i generuje dla nich identyfikator, np 123jjdnsaj334. Następnie taki identyfikator jest odsyłany w odpowiedzi żądania do klienta. Jeśli podczas następnego requestu klient HTTP (czyli np przeglądarka) odeśle taki indetyfikator sesji, to wtedy będziemy mieli dostęp do danych zapisanych w sesji na serwerze pod tym identyfikatorem. Jeśli nie, to nie. Tutaj przeglądarka nie może modyfikować tych danych, jedyne co może zrobić to odesłać identyfikator, odesłać inny (i jedyne co może zrobić to próbować go zgadnąć), albo nie odesłać nic - czyli zniszczyć sesję.
K8
K8
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 2 lata
  • Postów:791
1

Uzupełniając powyższe zobacz jeszcze to:
https://www.javatpoint.com/session-vs-cookies

jurek1980
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 2 godziny
  • Postów:3462
3
TomRiddle napisał(a):

Tak na prawdę to to są dwa zupełnie różne mechanizmy które nie mają ze sobą nic wspólnego, poza tym że w obu możesz przechowywać dane, ale to równie dobrze mógłbyś zadać pytanie "sesja vs pliki" albo "sesja vs baza"

Taki opis może być mylący, bo de facto oba mechanizmy oparte są o plik cookie na komputerze użytkownika.
W obu przypadkach tworzony jest plik cookie tylko jego zawartość jest inna i do czego innego służy. W skrócie ciasteczko przechowuje co chcesz i na stałe znajduje się to na komputerze użytkownika. Dzięki temu przeglądarka ma możliwość odczytania go i jakiejś interakcji. Np. ustawiasz tam rodzaj tła w serwisie jaki sobie wybrał użytkownik. Język interfejsu dla stron wielojęzycznych. Jednakże nie trzymasz tam niczego odpowiadającego za bezpieczeństwo lub danych, które nie powinny być modyfikowane.
Sesja z kolei to mechanizm gdzie specjalne cookies jest stworzone, w którym przechowywany jest tylko identyfikator. Ten identyfikator służy do znalezienia pliku z danymi po stronie serwera, do którego zawartości nie ma dostępu użytkownik.
Przykładowo mamy koszyk w sklepie. Kupujemy następny produkt i musimy przejść między stronami. W koszyku trzymamy ilość i cenę produktu. Po pierwsze musimy jakoś trzymać te dane przy przechodzeniu między stronami. Po drugie te dane nie mogą być modyfikowane od strony użytkownika. Zostaje nam więc użycie sesji.

No i teraz jesteś w stanie np. wziąć jeden plik cookie z sesją, skopiować go na inny komputer. Nie wylogowujac się z jakiegoś serwisu np. strony banku pozostawiamy aktywną sesję. Mając taki plik skopiowany na inny komputer przeglądarka może otworzyć Ci stronę bez konieczności zalogowania.
Resztę dobrze opisali koledzy.

K8
K8
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 2 lata
  • Postów:791
0

Nie jest jeszcze tak, że sesja "zmieści" więcej danych niż cookie? Mam na myśli zmienne sesyjne.

jurek1980
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 2 godziny
  • Postów:3462
3

@kosmonauta80: cookie jest po stronie przeglądarki z tego co kojarzę jeśli nic się nie zmieniło dla super nowoczesnych to ciągle jest limit 4KB na plik ciasteczka.
No ale sesja - jej dane, są trzymane po stronie serwera a nie klienta. Nie ma więc typowego limitu. Pewnie maksimum przydziału pamięci na wątek serwera czyli dla podstawowych ustawień PHP.ini 128MB.

drorat1
Sesje można trzymać także w cookie.
PZ
  • Rejestracja:ponad 2 lata
  • Ostatnio:około 2 lata
  • Postów:6
0
jurek1980 napisał(a):

No i teraz jesteś w stanie np. wziąć jeden plik cookie z sesją, skopiować go na inny komputer. Nie wylogowujac się z jakiegoś serwisu (...) Mając taki plik skopiowany na inny komputer przeglądarka może otworzyć Ci stronę bez konieczności zalogowania.

jak się przed tym zabezpieczyć, ale nie rezygnując z takiego mechanizmu sesji?

AN
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 17 godzin
  • Postów:973
0

Nie ma potrzeby się przed tym zabezpieczać (jeśli korzystasz z frameworków, które sesje ogarniają za Ciebie) z tego względu, że jedna możliwość, żeby takie cookie wyciekło to użytkownik, który tę sesje po prostu sobie weźmie. Równie dobrze mógłby dać komuś hasło. A jeśli ktoś nieautoryzowany ma dostęp do komputera to i tak może namieszać. Sesja jest w ciasteczku, do którego Javascript nie ma dostępu wiec przez JS nic nie wycieknie.

Można też również daną sesję przypisać do danego komputera i niektóre frameworki tak pewnie robią


Zdalna praca dla Senior Python Developerów --> PW
jurek1980
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 2 godziny
  • Postów:3462
0
CP
No i odkopałeś grzyba, leci report :> :D
CP
Jurek noobie, co to za odkopywanie trupów Kappa :>
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)