Skocz do zawartości
Pitasato

[PHP] Jak prawidło napisać koszyk dla niezarejestrowanej osoby

Rekomendowane odpowiedzi

Napisano (edytowane)

Cześć mam pytanie,  jak prawidłowo napisać koszyk w sklepie "dla niezarejestrowanej osoby"

oprócz utworzenia zmiennej sesyjnej przeprowadzać walidację czy jest utworzone ciasteczko ?

 

Czy polegać tylko na zmiennej sesyjnej utworzonej w bazie danych ?

 

Proszę o przeniesienie tematu do odp. działu

Edytowane przez Pitasato

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Powinieneś zawsze wybierać sesję PHP w takim wypadku, chyba że masz mocny argument dlaczego chcesz to robić za pomocą cookies.

 

Przede wszystkim primo - cookies są całkowicie po stronie klienta. To oznacza, że to on ma władzę nad tym czy po pierwsze w ogóle je ma włączone (nie musi), kiedy wygasają (mogą nigdy nie wygasnąć albo 10 sekund po tym jak sie zapiszą bo user sobie wyczyści), i jakie dane zawierają (mogę wyedytować cookies do dowolnych danych jakie sobie życzę).

 

Przy sesji PHP to ty kontrolujesz co jest zapisywane, nie potrzebujesz wsparcia cookies po stronie użytkownika, kontrolujesz to kiedy dane wygasają czyli jak długo są aktualne (co jest kluczowe jeśli chcesz oferować jakiegokolwiek rodzaju rezerwacje "koszyka" przed zakupem), i przede wszystkim user ich nie widzi, więc możesz tam zapisać dużo więcej.

 

Nie widzę jakiegokolwiek dobrego powodu realizacji koszyka po stronie cookies, to wygląda jak całkowicie nieadekwatne rozwiązanie. Cookies na ogół stosuje się wyłącznie jako "preference użytkownika", czyli identyfikator zalogowanej sesji, jakieś domyślne ustawienia sortowania produktów, być może język serwisu itp. Oczywiście dla userów niezalogowanych, bo dla zalogowanych możesz to zrobić również zwykłą bazą danych.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Napisano (edytowane)
7 godzin temu, Archi napisał:

Przy sesji PHP to ty kontrolujesz co jest zapisywane, nie potrzebujesz wsparcia cookies po stronie użytkownika,

Nie do końca to prawda, gdyż jest coś takiego jak cookie sesyjne wystawiane użytkownikowi, a w nim przechowywany identyfikator sesji chyba, że ten identyfikator jest przekazywany jako parametr URL, ale to raczej w minionej epoce.

 

I te Cookie sesyjne można ustawiać jak chodzi o jego parametry: php.net/manual/en/function.session-set-cookie-params.php

 

7 godzin temu, Archi napisał:

i jakie dane zawierają (mogę wyedytować cookies do dowolnych danych jakie sobie życzę).

Dane w cookies mogą być zaszyfrowane.

 

11 godzin temu, Pitasato napisał:

Czy polegać tylko na zmiennej sesyjnej utworzonej w bazie danych ?

Jak chodzi o obsługę sesji w bazie danych, to przechowujesz w niej zserializowane dane sesji nie sam identyfikator, wiec to nic nie zmienia.

Edytowane przez Mion

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
12 godzin temu, Pitasato napisał:

jak prawidłowo napisać koszyk w sklepie "dla niezarejestrowanej osoby"

oprócz utworzenia zmiennej sesyjnej przeprowadzać walidację czy jest utworzone ciasteczko ?

 

Tak aby struktury danych odpowiadały całości aplikacji.

 

Bad programmers worry about the code. Good programmers worry about data structures and their relationships. Torvalds, Linus (2006-06-27)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
14 godzin temu, Mion napisał:

Nie do końca to prawda, gdyż jest coś takiego jak cookie sesyjne wystawiane użytkownikowi, a w nim przechowywany identyfikator sesji chyba, że ten identyfikator jest przekazywany jako parametr URL, ale to raczej w minionej epoce.

 

Cookie sesyjne to jedynie jeden ze sposobów na zapisanie sesji po stronie klienta.

 

14 godzin temu, Mion napisał:

Dane w cookies mogą być zaszyfrowane.

 

I co w związku z tym? Nadal mogę wyedytować cookies do dowolnych wartości, twoje szyfrowanie nie ma tutaj nic do gadania, chyba nie chcesz mi powiedzieć, że trzymasz zaszyfrowane poufne dane w ciasteczkach, bo chyba warna za głupotę sprzedam :D

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
38 minut temu, Archi napisał:

Cookie sesyjne to jedynie jeden ze sposobów na zapisanie sesji po stronie klienta.

Nie zapisujesz sesje tylko identyfikator sesji, a to są dwie rożne sprawy.

39 minut temu, Archi napisał:

I co w związku z tym?

To w związku z tym, że dane w cookie nie są dostępne do podglądu i co ważniejsze modyfikacji bez ich "popsucia".

 

43 minuty temu, Archi napisał:

chyba nie chcesz mi powiedzieć, że trzymasz zaszyfrowane poufne dane w ciasteczkach,

Czemu zaraz poufne ? Mogą to być dane, które nie powinny być modyfikowane przez co sprytniejszych użytkowników po to zapisywane w  zapisane w cookie by były dostępne ileś czasu. Możliwości jest wiele.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Też jestem zdania że sesja PHP i trzymanie u siebie w bazie koszyków - wszelkich i na każdym etapie - jest najlepsze.

Tak odkładając na momeny na bok temat edytowania cookies  i ewentualnego wyedytowania np. ceny (to by dopiero było...) - to czy nie chciałbyś sobie wyciągać np. informacji o porzuconych koszykach?

Sesja plus baza daje Ci ogromne możliwości analityczne. Raczej nie napiszesz zgrabnej kwerendy wyciagajacej dane z ciastek rozsianych po przeglądarkach userów...

Poza juz wymienionymi to kolejny argument za sesją i bazą.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
10 minut temu, Artur Pajkert Hekko.pl napisał:

Poza juz wymienionymi to kolejny argument za sesją i bazą.

Sesja jest oczywistym wyborem dla koszyka zakupów zwłaszcza, że można ustawić czas życia sesji nie kończącej się zamknięciem przeglądarki , co może mieć znaczenie jak ten sam user wejdzie ponownie za jakiś czas dla porzuconego koszyka, ale to samo można zrobić z cookie. Jednak sesja ma służyć jedynie przechowywania jakiegoś identyfikatora dla rekordów koszyka w bazie danych.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
8 godzin temu, Mion napisał:

Nie zapisujesz sesje tylko identyfikator sesji, a to są dwie rożne sprawy.

 

Dzięki, że mówisz, może mi teraz wytłumaczysz czym są te całe cookies bo nie mam zbytnio pojęcia :) Czepianie się skrótów myślowych chyba jeszcze nie przerabiałem.

 

8 godzin temu, Mion napisał:

To w związku z tym, że dane w cookie nie są dostępne do podglądu i co ważniejsze modyfikacji bez ich "popsucia".

 

 

Masz jakiekolwiek pojęcie o bezpieczeństwie? Bo czuję się jak na pierwszym roku studiów inżynierskich z wykładu o security. Mam nielimitowany zestaw prawidłowo zaszyfrowanych danych, wiesz co to oznacza? A jak nie to wytęż szare komórki i może dojdziesz do jakiś prawidłowych wniosków. Nie, nie martw się, dzisiaj większość najpierw robi a potem myśli.

 

Mam tylko nadzieję, że na żadnej produkcji takich rzeczy nie robisz, bo się zdziwisz któregoś dnia ;)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Napisano (edytowane)
7 godzin temu, Archi napisał:

Dzięki, że mówisz, może mi teraz wytłumaczysz czym są te całe cookies bo nie mam zbytnio pojęcia

 

W dniu 1.12.2017 o 02:16, Archi napisał:

Przy sesji PHP to ty kontrolujesz co jest zapisywane, nie potrzebujesz wsparcia cookies po stronie użytkownika

<?php
session_start()
...

cookie_sesyjne.jpg.0cae2cf5ce91e74612502bfdfeb1f87e.jpg

 

Tylko zapomniałem, że współczesne przeglądarki zapisują cookies nie jako pojedynczy pliki jak kiedyś , ale w swojej bazie SQLite.

Ktoś może pomyśleć, że jak użyje sesji, to nie będzie musiał wystawiać nieszczęsnych informacji o cookie

 

 

7 godzin temu, Archi napisał:

Mam tylko nadzieję, że na żadnej produkcji takich rzeczy nie robisz, bo się zdziwisz któregoś dnia

Dziękuję za Twoją radę ... dobrych rad nigdy za wiele zwłaszcza, że faktycznie czegoś nowego się dowiedziałem

 

Cytuj

mcrypt_encrypt -

WarningThis function has been DEPRECATED as of PHP 7.1.0. Relying on this function is highly discouraged.

 

 

@ Mam tylko nadzieję, że na żadnej produkcji takich rzeczy nie robisz, bo się zdziwisz któregoś dnia

google_cookie_1.thumb.jpg.1f519c65fee598f666fedec9b87690cb.jpg

 

google_cookie_2.thumb.jpg.38493b04662b333c6789b81cc6d4f570.jpg

 

Z mojego punktu widzenia jako wartość cookie są dane "zaszyfrowane", bo nie wiem co przechowują i coś takiego miałem na myśli.

 

Z mojej strony to wszystko jak chodzi o te cookies  ;)

 

 

 

 

 

 

 

Edytowane przez Mion

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
16 godzin temu, Archi napisał:

chyba nie chcesz mi powiedzieć, że trzymasz zaszyfrowane poufne dane w ciasteczkach, bo chyba warna za głupotę sprzedam

 

https://jwt.io/

 

Pomyśl ile serwisów korzysta z tego rozwiązania rzeczywiście trzymając poufne dane w cookies.

  • Lubię 1
  • Smutny 1

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Napisano (edytowane)

@archi, czyli atakujący nie jest w stanie zgadnąć hasha nawet gdy prześlę go metodą get ?

 

mógłbym zrobić weryfikację nowego adresu IP,  jeśli jest inny to weryfikacja po smsie ? tak jak robi to google

Edytowane przez Pitasato

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

"Zgadywanie hasha" - Ciekawa dyskusja się zapowiada....

 

Hash to wg mojej wiedzy funkcja skrótu, np. sha1, md5 itp. Służy do "względnie" unikatowego, jednokierunkowego przekształcenia informacji, zmapowania informacji na ciąg o zadanej z góry długości.  Są jednak tacy, co przy pomocy np. brute forców lub różnych tablic, próbują z większym lub mniejszym szczęściem "odwracać" takie funkcje, ale raczej nie nazwałbym tego odszyfrowywaniem tylko mozolnym odgadywaniem. Dla krótkich informacji jest to jednak możliwe.

 

Szyfrowanie to coś odmiennego - jego celem jest takie przekształcenie informacji, żeby, mając odpowiedni klucz, dawało się ją w drugą stronę "odczytać". I to najchętniej bez stosowania gigantycznych mocy obliczeniowych, wielkich tablic itp. 

 

@Pitasato, wprawdzie pytasz @Archi, ale mnie wątek też zaciekawił - możesz dokładniej wyjaśnić, co masz na myśli mówiąc o "zgadywaniu  hasha nawet gdy prześlę go metodą get"?

Co tam w tablicy GET chciałbyś mieć dokładnie? I co masz na myśli mówiąc "zgadywanie hasha"? Hasha (czyli skrótu) z czego?

 

  • Lubię 1

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Hash stosujesz jak nie potrzebujesz znać konkretnej informacji, ale potrzebujesz zweryfikować ją czy się zgadza. To się stosuje np. w przypadku haseł i logowania, bo tu po stronie serwera nie potrzebujesz znać hasła, potrzebujesz jedynie wiedzieć czy hasło podane przez użytkownika zgadza się z tym w bazie danych, i w tym celu sprawdzasz właśnie czy hash się zgadza z tym zapisanym.

 

Szyfrowanie stosujesz w przypadku gdy musisz mieć dostęp do danej informacji, czyli ją odszyfrować. Jak wysyłasz do kogoś np. wiadomość tekstową to musisz ją zaszyfrowac, tak żeby druga strona mogła ją odszyfrować. Nie możesz tutaj zastosować np. hasha, bo nie znasz treści wiadomości. Jeśli być ją znał, to mógłbyś otrzymać zaszyfrowaną wiadomość i wyliczyć hash tej wiadomości, a następnie zweryfikować hashem czy wiadomość jest poprawna. Podobne techniki stosuję się przy podpisywaniu wiadomości używając PKI.

  • Lubię 1

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

ok wszystko rozumiem! dziękuję za wyjaśnienie, wykonam koszyk za pomocą session

myślę że przy nietypowym nagłówku lub częstej zmianie ip, zrobię weryfikację za pomocą sms

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się


  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×