Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> serialize przed header, Czy to jest dobry pomysł?
Civil
post
Post #1





Grupa: Zarejestrowani
Postów: 86
Pomógł: 1
Dołączył: 19.09.2006
Skąd: Wrocław

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


Witam,
Mam takie pytanie. Na początku kodu inicjuję koszyk:
  1. if (isset($_SESSION['cart']) and unserialize($_SESSION['cart']))
  2. {
  3. include_once("classes/class.basket_head.php");
  4.  
  5. $cart = unserialize($_SESSION['cart']);
  6. }
  7. else
  8. {
  9. $cart = new basket_head();
  10. }


Na końcu kodu go serializuję:
  1. <? $_SESSION['cart'] = serialize($cart); ?>



I teraz tworząc funkcje do zapisu użytkownika robię coś takiego:
  1. if($insert_client and $insert_client_data)
  2. {
  3. $_SESSION[register_proceed][customers_login]=$_POST[customers_login];
  4. //serializacja koszyka
  5. $_SESSION['cart'] = serialize($cart);
  6. header("location:index.php?mod=register_success");
  7.  
  8. }


Czyli jeżeli poprawnie został dodany rekord, no to zapisuję w sesji login usera, serializuję koszyk i robię przekierowanie headerem. Jeżeli są błędy to jest zwracany formularz bez użycia funkcji header (z danymi z tablicy $_POST)
Testowałem to i wygląda na to, że działa - ale chciałbym się spytać czy to jest optymalne rozwiązanie? Header jest po to, by przenieść usera na nową stronę i nie pozwolić mu np. na ponowne przesłanie danych za pomocą refresh.

Oczywiście, jeżeli po drodze wyskoczy jakiś błąd to nie dojdzie do serializacji koszyka i zostanie on zgubiony.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Testowałem to i wygląda na to, że działa

Włącz raportowanie błędów, to przestanie. (IMG:style_emoticons/default/winksmiley.jpg) (wskazówka: masz stałe, których używasz w kluczach tablic?)

Cytat
ale chciałbym się spytać czy to jest optymalne rozwiązanie? Header jest po to, by przenieść usera na nową stronę i nie pozwolić mu np. na ponowne przesłanie danych za pomocą refresh.

Najprostsze rozwiązania są najlepsze. Chyba w którymś przyklejonym wątku został poruszony problem powtórnego wysyłania danych.
Go to the top of the page
+Quote Post
Pilsener
post
Post #3





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


No dobrze, a cel tego?
1. Po co serializować? Serializuje tablicę się zazwyczaj wtedy, jeśli chcemy ją zapisać do pliku .cfg, przecież każda zmienna może być równie dobrze tablicą, nawet $_POST['formularz'].
2. Przekierowania nie są zalecane ze względu na wydajność i logikę - po co przekierowywać usera do strony, na której już jest? Aby się zabezpieczyć przed F5 czy przypadkowym błędem, wystarczy nadać każdemu formularzowi pole hidden z value:
  1. $token = md5(uniqid());
- i sprawdzić, czy nowy formularz ma nowy token.
Go to the top of the page
+Quote Post
Civil
post
Post #4





Grupa: Zarejestrowani
Postów: 86
Pomógł: 1
Dołączył: 19.09.2006
Skąd: Wrocław

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


Serialuję tutaj akurat z innego powodu - aby zachować tablice związaną z koszykiem. Za pomocą serializacji mogę od razu wywołać klasę z wartością zmiennych (id, ilość itd.), aczkolwiek pewnie też dałoby się to zrobić w ten sposób że za każdym razem jest uruchamiana klasa, do której podaję tablicę zapisaną za pomocą sesji czyli byłoby $cart=new basket_head($_SESSION[cart]). Ale opcja z serializacją nie jest głupia też (IMG:style_emoticons/default/winksmiley.jpg)

Co do przekierowania: to user jest przekierowywany do innej strony - po to też zapisuje w sesji jego login.

Nie bardzo rozumiem o co chodzi z tymi stałymi jako kluczami, nie można używać znaków $_SESSION['cart'] , musi być $_SESSION[cart]?
Go to the top of the page
+Quote Post
erix
post
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Nie bardzo rozumiem o co chodzi z tymi stałymi jako kluczami, nie można używać znaków $_SESSION['cart'] , musi być $_SESSION[cart]?

Popatrz teraz na swój kod i powiedz, czy jesteś świadom tego, co powiedziałeś. (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Civil
post
Post #6





Grupa: Zarejestrowani
Postów: 86
Pomógł: 1
Dołączył: 19.09.2006
Skąd: Wrocław

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


No nie bardzo wiem, o co Ci chodzi, możesz jaśniej?
Go to the top of the page
+Quote Post
erix
post
Post #7





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Kłania się czytanie ze zrozumieniem...

Powiedziałeś zupełnie odwrotnie - w kodzie masz pseudostałe, w poście wyżej mówisz zupełnie na odwrót...
Go to the top of the page
+Quote Post
Civil
post
Post #8





Grupa: Zarejestrowani
Postów: 86
Pomógł: 1
Dołączył: 19.09.2006
Skąd: Wrocław

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


Czyli dobrze będzie:
  1. $_SESSION['register_proceed']['customers_login']=$_POST['customers_login'];


zamiast:
  1. $_SESSION[register_proceed][customers_login]=$_POST[customers_login];


(IMG:style_emoticons/default/snitch.gif)


?
Go to the top of the page
+Quote Post
erix
post
Post #9





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Włącz sobie raportowanie błędów i zobacz... (IMG:style_emoticons/default/sciana.gif)
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: 15.09.2025 - 22:05