Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> koszyk na zakupy na sesjach, nie działa przy register_globals = off
Olimpia_ona
post
Post #1





Grupa: Zarejestrowani
Postów: 71
Pomógł: 2
Dołączył: 10.03.2005
Skąd: Elbląg

Ostrzeżenie: (0%)
-----


Witam,
pisałam już kiedyć o koszyku. Wszystkie problemy z nim związane rozwiązałam i wydawało mi się, że już wszystko jest ok, ale zapomniałam zmienić ustawień serwera na register_globals = off, po tej zmianie nie trzyma mi tego koszyka. Nie pamięta zmiennej $stan, co wydaje się być logiczne, ale teraz proszę o pomoc, co muszę zrobić, by jednak ten koszyk działał z register_globals = off.

Fragment jak mam to zrobione:
  1. <?php
  2. ...
  3. $koszyk=$_SESSION['koszyk'];
  4. $dodaj=$_GET['dodaj'];
  5. $usun=$_GET['usun'];
  6. $zmien=$_GET['zmien'];
  7. $first=$_GET['first'];
  8. ...
  9. class koszyk 
  10. { 
  11. /* tablica asocjacyjna zawierajaca stan koszyka */ 
  12. /* klucz, to wartosc id produktu, wartosc to ilosc elementow */ 
  13. var $zawartosc; 
  14.  
  15. function dodaj($element, $ilosc) 
  16. { 
  17. $this->zawartosc[$element] += $ilosc; 
  18. } 
  19.  
  20. function usun($element, $ilosc) 
  21. { 
  22. if ($this->zawartosc[$element] > $ilosc) 
  23. $this->zawartosc[$element] -= $ilosc; 
  24. else 
  25. unset($this->zawartosc[$element]); 
  26. } 
  27.  
  28. function zmien($element, $ilosc) 
  29. { 
  30. $this->zawartosc[$element] = $ilosc; 
  31. } 
  32.  
  33. function stan() 
  34. { 
  35. return $this->zawartosc; 
  36. } 
  37. } 
  38.  
  39. if (!$koszyk) 
  40. $koszyk = new koszyk; 
  41. ...
  42. if ($dodaj) 
  43. $koszyk->dodaj($dodaj1, 1); //dodaj($element, $ilosc) - dodaje $ilosc $elementow do koszyka
  44. ...
  45. session_register('koszyk');
  46.  
  47. $stan = $koszyk->stan(); //zwraca zawartosc w postaci hasza
  48. ...
  49. //i wyświetlanie koszyka
  50. if ($stan) 
  51. {
  52.  $ilewkosz=0;
  53.  while (list($key, $value) = each($stan))
  54.  { 
  55.  echo "produkt: $key ilość:$value<br />";
  56.  }
  57. }
  58. ?>


próbowałam robić coś w stylu:
$stan=$_SESSION['stan'];
session_register("stan");

ale to nie pomogło.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
domis86
post
Post #2





Grupa: Zarejestrowani
Postów: 255
Pomógł: 5
Dołączył: 20.03.2007
Skąd: Kraków

Ostrzeżenie: (30%)
XX---


hmmm
Musisz bardziej zgłębić wiedzę o sesjach.

http://pl.php.net/manual/sv/function.session-register.php

tu czytamy:

Observera
If you are using $_SESSION (or $HTTP_SESSION_VARS), do not use session_register(), session_is_registered(), and session_unregister().






także po pierwsze: wyeliminuj session_register z tego skryptu i dopiero możemy rozmawiać (IMG:http://forum.php.pl/style_emoticons/default/aarambo.gif)

(uzywaj tylko $_SESSION[$cos] = $x oraz $x = $_SESSION[$cos] )
Go to the top of the page
+Quote Post
Olimpia_ona
post
Post #3





Grupa: Zarejestrowani
Postów: 71
Pomógł: 2
Dołączył: 10.03.2005
Skąd: Elbląg

Ostrzeżenie: (0%)
-----


Cytat(domis86 @ 15.06.2007, 11:16:56 ) *
Observera If you are using $_SESSION (or $HTTP_SESSION_VARS), do not use session_register(), session_is_registered(), and session_unregister().
także po pierwsze: wyeliminuj session_register z tego skryptu i dopiero możemy rozmawiać (IMG:http://forum.php.pl/style_emoticons/default/aarambo.gif)

(uzywaj tylko $_SESSION[$cos] = $x oraz $x = $_SESSION[$cos] )


Dziękuje, nie wiedziałam o tym, chyba rzeczywiście będe musiała pogłębić swoją wiedzę (ale w sumie myśle, że robie to cały czas (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) )

Niestety zlikwidowanie session_register nic nie pomogło. Wpisałam nawet
  1. <?php
  2. $_SESSION['stan'] = $koszyk->stan();
  3. $stan=$_SESSION['stan']; //tutaj próbuje to przypisać do normalnej zmiennej, bo w zbyt wielu miejscach na s
    tronie już z niej kożystam.
  4. ?>


Ten post edytował Olimpia_ona 15.06.2007, 13:20:34
Go to the top of the page
+Quote Post
likemandrake
post
Post #4





Grupa: Zarejestrowani
Postów: 175
Pomógł: 17
Dołączył: 23.06.2006

Ostrzeżenie: (0%)
-----


Witam

To co tu napisze, bedzie dotyczyc kodu z Twojej pierwszej wypowiedzi w tym poscie, a wiec...

Usuwasz linie 46
Miedzy linie 58, a 59 wstaw: $_SESSION['koszyk']=$koszyk;

Mysle ze powinno dzialac, ale nie jestem kompilatorem, jak co to bedziemy dalej kombinowac (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Przeczytaj to
Wyraznie jest opisany Twoj problem w bloku Uwaga

Jak zapewne widzisz, do zmiennej sesyjnej zostaje zapisany caly obiekt klasy, mysle ze lepszym rozwiazaniem byloby zapisanie tablicy z samym stanem koszyka, przy kazdym wywolaniu skryptu, zawsze bylby w takim razie tworzony obiekt klasy koszyk i dolaczany do niego aktualny stan koszyka pobrany ze zmiennej sesyjnej.

Jeszczed lepszym rozwiazaniem bedzie utworzenie tabeli w bazie danych, ktora to moglaby trzymac niezatwierdzony stan koszyka, a dopiero potem jak koszyk zostaje zatwierdzony, to po zweryfikowaniu danych, dane sa te przeniesione do odpowiedniej tabeli - tabeli zamowien, gdzie beda juz trzymane ostateczne dane.

Trzymanie calej zawartosci obiektu w sesji nie jest bezpiecznym rozwiazaniem, wystarczy ze ktos przelapie SID uzytkownika X i w tym momencie ten uzytkownik ma wszystko to co zrobil użytkownik X, czyli aktualny stan koszyka, itp. Mam nadzieje, ze jakos zabezpieczasz sie przed tego typu defektami (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Pozdrawiam serdecznie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
domis86
post
Post #5





Grupa: Zarejestrowani
Postów: 255
Pomógł: 5
Dołączył: 20.03.2007
Skąd: Kraków

Ostrzeżenie: (30%)
XX---


Cytat(likemandrake @ 16.06.2007, 00:06:47 ) *
Trzymanie calej zawartosci obiektu w sesji nie jest bezpiecznym rozwiazaniem, wystarczy ze ktos przelapie SID uzytkownika X i w tym momencie ten uzytkownik ma wszystko to co zrobil użytkownik X, czyli aktualny stan koszyka, itp. Mam nadzieje, ze jakos zabezpieczasz sie przed tego typu defektami (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Co ty za farmazony opowiadasz?
Przeciez dane w sesji nie są widoczne przez usera nawet jak ma SID.
Jak ma SID to znaczy ze system uwaza go za tego usera, ktorego id jest zapisane w sesji i tyle (IMG:http://forum.php.pl/style_emoticons/default/aarambo.gif)
Takze nie siej paniki
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #6





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


@likemandrake
Cześć tych informacji było wcześniej podana.

@domis86
Czytaj uważnie, nie mowa jest o dostępie bezpośrednim do danych w sesji a o zawartości koszyka.

A co do serialize i unserializ to przy obiektach trzeba uważać, bo obsługę tego powinien zapewnić autor klasy, tylko że to wymaga wiedzy o tym co powinno się robić. Do tego przy unserializ'owaniu skrypt musi mieć dostęp do definicji klasy obiektu.

Do tego o koszyku i sesji był już temat, więc wystarczy poszukać.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.12.2025 - 08:01