Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Tworzenie się ciasteczek (subfoldery) - zamiast na całą stronę
Forum PHP.pl > Forum > Przedszkole
Niree
Witam.

Napisałem taki kodzik (index.php)

  1. if(!empty($_COOKIE['UNIQUESESSION_SHOP_USER']))
  2. {
  3. checkIfCartHashExist($_COOKIE['UNIQUESESSION_SHOP_USER']);
  4. //tutaj tworzenie ciastka UNIQUESESSION_SHOP_CART
  5. }
  6. else if(!empty($_COOKIE['UNIQUESESSION_SHOP_CART']))
  7. {
  8. checkIfUserHashExist($_COOKIE['UNIQUESESSION_SHOP_CART']);
  9. //tutaj tworzenie ciastka UNIQUESESSION_SHOP_USER
  10. }
  11. else
  12. {
  13. createCartUser();
  14. //tutaj tworzenie i UNIQUESESSION_SHOP_USER i UNIQUESESSION_SHOP_CART
  15. }


Teraz problem jest tego typu. Wszystko działa poprawnie, dopóki nie wejdziemy na stronę np. strona.pl / koszyk (regułka mod_rewrite i tak przekierowuje na index.php)
W tym przypadku skrypt sprawdza pierwszy warunek i ustawia ciastko naszego "koszyka", ale uwaga, tylko na podstronie /koszyk/
I jest problem, bo tworzą się trzy ciastka. Koszyk, użytkownik i koszyk w /koszyk/
Jak wejdę w /zamowienie/ to adekwatnie, tworzy nam ciastko koszyka (pierwszy warunek) na ścieżkę /zamowienie/ zamiast nadawać ciastko na całą stronę. Jak temu zaradzić, jak to zabezpieczeć żeby te ciastka były ZAWSZE na całą stronę, a nie na dane podfoldery, no i żeby się "nadpisywały" będąc na podstronie, a nie tworzyły nowe?

Kod w funkcji:

  1. setcookie('UNIQUESESSION_SHOP_USER', $row['user_hash']);
trueblue
Przejrzyj dokumentację funkcji setcookie, dokładnie parametr path.
Niree
Cytat(trueblue @ 27.06.2017, 19:34:56 ) *
Przejrzyj dokumentację funkcji setcookie, dokładnie parametr path.


Ale gdy ustawiłem parametr 'path' na '/' to tworzyło mi cały czas nowe ciasteczka. Zamiast sprawdzić warunek 1 i 2 to od razu robiło 3. Za każdym razem. Wejście w /koszyk/ to już w ogóle, kolejne 2 ciastka mimo istnienia tych ciastek.
trueblue
Pokaż więcej kodu - jak tworzysz ciastka.
Niree
Generalnie dostałem dostęp do adresu:

dev.hosting.pl/niree/

Funkcja:
  1. global $db; global $smarty; global $todaydate; global $area;
  2. $sql = mysqli_query($db, "SELECT * FROM `" . PREFIX . "_cart_users` WHERE `cart_hash`='" . escs($carthash) . "'") or die(mysqli_error($db)); //sprawdza, czy takie ciastko jest w bazie
  3. if(mysqli_num_rows($sql) > 0) while($row = mysqli_fetch_array($sql))
  4. {
  5. updateActiveTime($row['user_hash'],$area); //update daty aktywnosci
  6. $sql_product = mysqli_query($db, "SELECT * FROM `" . PREFIX . "_cart` WHERE `cart_hash`='" . escs($carthash) . "'") or die(mysqli_error($db));
  7. $smarty->assign('cart_items', mysqli_num_rows($sql_product)); //pobiera produkty
  8. setcookie('UNIQUESESSION_SHOP_USER', $row['user_hash']); //ustawia ciastko koszyka z bazy ($sql)
  9. }
  10. else
  11. {
  12. createCartUser(); //tworzy nowy koszyk i nowego użytkownika, funkcją rand().
  13. }


Problem w tym, że jak ustawię, tak jak mówiłeś, path na '/', to gdy wejdę na stronę to za każdym razem tworzy mi nowy koszyk. Tak jakby skrypt nie zczytywał cookies, może zamiast '/' powinien być folder do którego mam FTP? czyli '/niree/'?
No ale tak czy siak stworzy ciastko w /niree/koszyk/, w konsekwencji będę miał dwa ciastka ze strony głównej i jedno (o tej samej wartości i nazwie) na path /koszyk/ - tak jest teraz. Nie mówię, że to w czymś przeszkadza, ale po co dwoić i troić ciastka. Niech będą dwa na całą stronę, a nie dwa takie same w danej podstronie.
trueblue
Ustawiasz ciastko, a operujesz na wyniku z bazy danych.
Niree
Nie wiem, czy zrozumiałeś kod.

Warunek sprawdza, czy ciastko istnieje, jeśli istnieje to sprawdza, który koszyk jest z nim połączony, jeśli żaden koszyk nie jest połączony z tym ciastkiem, to tworzy i nowego usera i nowy koszyk (analogicznie w drugim warunku)

Co ma tutaj operacja na bazie, skoro to jest funkcja i tylko sprawdza, czy wpis istnieje? Problem jest z samym nadaniem ciastka na podstronach. Po prostu tworzy zbędne ciastka.
Wchodzę na index.php - jest okej, są maksymalnie dwa ciastka.
Wchodzę na /koszyk/ - fakt, spełnia się warunek i nadaje nam ciastko koszyka, ale DODAJE NOWE ciastko, zamiast nadpisywać stare. W dodatku nie dość nie że nadpisuje, to jeszcze ustawia ścieżkę na /koszyk/.

Czyli na /koszyk/ mam 3 ciastka: 1 - user ze strony głównej, 2 - koszyk ze strony głównej, 3 - koszyk ze ścieżką /koszyk/
Widocznie setcookie na /koszyk/ nadaje ścieżkę zgodnie z obecnym katalogiem.

Popróbuję z tym path, może przez zmęczenie mi już mózg świruje.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.