![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 65 Pomógł: 0 Dołączył: 6.11.2008 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Mam taki problem. Prowadzę sklep WWW na własnym silniku. Koszyki klientów niestety szybko się wygaszają ponieważ zapisuję je w $_SESSION['costam']. Aby rozwiązać problem zacząłem każdy rozpoczęty koszyk z ostatnim stanem rejestrować w bazie danych MySQL. To działa bez zarzutu. Dzięki temu mam wgląd w niezrealizowane zakupy itp.
Aby zapamiętywać koszyki postanowiłem do $_COOKIE zapisać id aktualnej sesji które jest tożsame z id sesji w bazie danych. Następnie wywołuje takie coś.
W momencie jak ręcznie z przeglądarki kasuję id sesji to bez problemu przywraca mi stary koszyk. Jak zamknę na noc przeglądarkę to niestety po otwarciu WWW koszyk jest pusty. Jakieś pomysły? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Coś tu dziwnie kombinujesz.
Cytat Aby zapamiętywać koszyki postanowiłem do $_COOKIE zapisać id aktualnej sesji które jest tożsame z id sesji w bazie danych. Przecież tak właśnie działa standardowa sesja w PHP, że w cookie zapisuje ID sesji. Nie zapisuj koszyka w cookie, tylko użyj normalnej sesji i ją skonfiguruj, albo zrób sobie własny mechanizm sesji. W danych sesji, czyli w plikach albo bazie danych, zapisz dane koszyka. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 65 Pomógł: 0 Dołączył: 6.11.2008 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Coś tu dziwnie kombinujesz. Przecież tak właśnie działa standardowa sesja w PHP, że w cookie zapisuje ID sesji. Nie zapisuj koszyka w cookie, tylko użyj normalnej sesji i ją skonfiguruj, albo zrób sobie własny mechanizm sesji. W danych sesji, czyli w plikach albo bazie danych, zapisz dane koszyka. Dziwnie? Dlaczego? Przeczytałeś cały mój post czy tylko powierzchownie rzuciłeś okiem? Dopisuję id sesji do ciastka o innej nazwie niż PHPSESSID ponieważ sesja wygasa, a ciastko pozostaje w komputerze użytkownika. Tym samym zapamiętuję w ciastku ID rozpoczętego koszyka, który jest w bazie danych. W przeciwnym wypadku po zamknięciu sesji nie mam szans odczytania ID bo generuje się nowe. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Sesja wygasa, bo masz ją źle skonfigurowaną - o tym mówię. Niepotrzebnie wprowadzasz zamęt tym używaniem standardowej sesji i własnej pseudo-sesji.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Przyjrzyj się opcjom sesji w szczególności http://php.net/manual/en/session.configuration.php gc i lifetime. Koszyk dla zalogowanych możesz powiązać po id użytkownika. Do tego twój kod jest podatny na atak i wykorzystuje usunięte rozszerzenie mysql.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) ![]() ![]() |
User wchodzi, generujesz mu CIASTECZKO z unikalnym ID np. md5 lub uniqid.
User dodaje cokolwiek do koszyka, pobierasz ID z ciasteczka i dodajesz do bazy wiersz z zawartością koszyka. To samo robisz przy dodawaniu kolejnych, usuwaniu. User zamyka stronę, wraca za 3 dni i nie ma żadnej różnicy, dalej widzi koszyk bo ciasteczko możesz i ustawić na bezterminowe. Jednakże ja bym tego nie robił na tak długo, max kilka dni. Jeżeli user ma konto to zawartość koszyka nie przypisujemy do "ciasteczka" tylko do user_id. Tak samo jak robił zakupy i się zalogował to musimy przepisać (UPDATE) pod niego wiersze z koszykiem. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 419 Pomógł: 5 Dołączył: 7.08.2012 Ostrzeżenie: (0%) ![]() ![]() |
User wchodzi, generujesz mu CIASTECZKO z unikalnym ID np. md5 lub uniqid. User dodaje cokolwiek do koszyka, pobierasz ID z ciasteczka i dodajesz do bazy wiersz z zawartością koszyka. oczywiście po wcześniejszej walidacji (IMG:style_emoticons/default/smile.gif) @esiek, unikaj kodu w stylu:
pisz ////////// pyton_000 (IMG:style_emoticons/default/aarambo.gif) Ten post edytował ZenekN 1.02.2018, 13:35:11 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Jeśli już to starczy:
Tak poza tym to nie używamy już mysql_* |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Cytat Mam taki problem. Prowadzę sklep WWW na własnym silniku - proponuję w takim razie zmienić silnik. Reanimowanie bez końca tego typu projektów to tylko strata czasu, jak byś nie kombinował i tak nie będzie dobrze działać.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 04:27 |