Skocz do zawartości
  • Cześć!

    Witaj na forum RootNode - aby pisać u nas musisz się zarejestrować, a następnie zalogować. Posty pisane z kont niezarejestrowanych nie są widoczne publicznie.

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


Rekomendowane odpowiedzi

Opublikowano (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
Opublikowano

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.

Opublikowano (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
Opublikowano
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)

Opublikowano
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

Opublikowano
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.

Opublikowano

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ą.

Opublikowano
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.

Opublikowano
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 ;)

Opublikowano (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
Opublikowano
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
Opublikowano (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
Opublikowano

"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
Opublikowano

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
Opublikowano

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

  • 1 miesiąc temu...
Opublikowano

to znowu ja :D

 

Chciałem jeszcze zapytać jak to jest z płatnościami np. przelewy24 dla nie zarejestrowanej osoby

w sumie user po wybraniu płatności wybiera tylko że chce zapłacić przez przelewy24 a reszta działa po stronie serwera, wiec ogólnie w miare dobrze napisanej obsługi transakcja powinna być bezpieczna.

 

Dobrze myślę ?

 

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Korzystając z forum, wyrażasz zgodę na: Warunki użytkowania, Regulamin, Polityka prywatności.