Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> php a nowa sesja w zakładce
Gizypl
post
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 13.09.2012

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


Witam serdecznie
Dopadła mnie pewna bezsilność - nie bardzo mam pomysł na rozwiązanie problemu:

jest strona z kreatorem - przechodzi kilka podstron i zadaje pytania
w sesji są zbierane odpowiedzi
następnie na podstawie tych odpowiedzi jest generowane podsumowanie = wyliczenie
wszystko jest ok poza sytuacją gdy użytkownik odpali w przeglądarce drugą zakładkę
do do tego kreatora - oczywiście dane z jednej zakładki zmieniają jednocześnie zbierane dane
z drugiej zakładki - czyli nie mogę poprowadzić równolegle dwóch osobnych wyliczeń - jednego w jednej zakładce a drugiego w drugiej.

Czy ktoś ma może jakiś sprawdzony sposób na to lub może poda pod czym szukać rozwiązania?

Pozdrawiam serdecznie.
PS> domyślam się iż pewnie JS pomoże ale wolał bym uniknąć.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
ohm
post
Post #2





Grupa: Zarejestrowani
Postów: 623
Pomógł: 144
Dołączył: 22.12.2010

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


Może lepiej bazować na cookie? Dla każdego nowego wyliczenia tworzysz cookie i w nim zapisujesz odpowiednio wybrane opcje.
Go to the top of the page
+Quote Post
johny_s
post
Post #3





Grupa: Zarejestrowani
Postów: 594
Pomógł: 122
Dołączył: 17.07.2005
Skąd: P-na

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


Tylko że cookie też jest to samo dla całej przeglądarki, możesz z jakimś dodatkowym parametrem w linku się pobawić, ale to też jak go skopiuje na nic się zda.
Go to the top of the page
+Quote Post
Gizypl
post
Post #4





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 13.09.2012

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


wygląda mi na to że dla serwera php nowe okno w przeglądarce niczy się nie różni do starego
ani ciacho ani id sesji ani parametr w linku
Go to the top of the page
+Quote Post
Crozin
post
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1. Przy wejściu na pierwszy krok kreatora wygeneruj jakiś losowy identyfikator. md5(uniqid()) wystarczy.
2. Identyfikator ten będziesz na każdym kroku kreatora (włącznie z pierwszym) przekazywał w jakimś ukrytym polu formularza.
3. Dane w sesji składuj w $_SESSION['ankiety'][$identyfikator][...]
Go to the top of the page
+Quote Post
Gizypl
post
Post #6





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 13.09.2012

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


wersja z generowanym losowym identyfikatorem problem rozwiązuje połowicznie
- czyli można poprowadzić 2 kreatory ale znowu gdy użytkownik w trakcie działania kreatora np. na 2 lub 3 stronie otworzy link w nowym oknie to sprawa pada bo mam 2 okna z tym samym identyfikatorem
bo głównie o to chodzi - trochę źle przekazałem inf - nie potrzebuję 2 kreatorów tylko chcę uniknąć sytuacji gdy użytkownik idzie jednym kreatorem a drugi otwiera "dla pamięci" i pierwszy kreator nadpisuje dane drugiego więc po chwili pomimo że na stronie w kreatorze A są wyświetlone dane A to w sesji są dane z B i naciśnięcie przycisku "zamawiam" w kreatorze A zamówi produkt B.

Go to the top of the page
+Quote Post
Sephirus
post
Post #7





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Ja bym zastosował mechanizm tokenów z zabezpieczeń przed CSRF. Trochę rozwiązanie podobne do Crozina.

Otóż:

Klient otwiera stronę z formularzem. Generujesz jakiś TOKEN (hash, md5, sha1 - whatever), zapisujesz go do sesji pod "form_token" i wrzucasz do ukrytego pola formularza.

Klient wysyła form - > sprawdzasz czy token z sesji jest taki jak token z forma - jeśli tak działasz jeśli nie - dajesz info o błędzie.

Jak to może rozwiązać Twój problem?

Klient będąc na stronie z formularzem otwiera nową zakładkę. W tym momencie nowa zakładka z tym formem ma aktywny token (zastąpił on stary token w sesji). Aktywną stroną zatem jest teraz strona nowa.

Przy wysyłaniu danych ze strony 1 dostaniesz błąd. Przy wysyłaniu ze strony 2 (nowej) wszystko pójdzie. Rozwiązanie oczywiście skaluje się na n otwieranych nowych okien.

Możesz w tej styuacji dodać dodatkowy "bajer". Na stronie wrzucić ajaxa który co powiedzmy 5 sekund będzie odwoływał się do skryptu php wysyłając token. PHP zwróci info czy jest on aktualny. Jeśli nie możesz wyświetlić na stronie info w stylu "OTWORZYŁEŚ NOWĄ ZAKŁADKĘ Z FORMULARZEM - SESJA W TEJ ZAKŁADCE WYGASŁA... bla bla bla" itp wink.gif


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
Gizypl
post
Post #8





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 13.09.2012

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


Hej wróciłem ponownie do tematu
i nadal po grzebaniu w sieci nie udało mi się znaleść sensownego sposobu na rozróżnienie zakładek w przeglądarce - jakieś id czy inny sposób i wyglada na to iż jedynym wyjściem jest pomysł Sephirusa (dzięki!) czyli ograniczenie do jednego aktywnego formularza.
Czy może ktoś ma jakiś świerzy pomysł ?

Pozdrawiam
Go to the top of the page
+Quote Post
freewalker
post
Post #9





Grupa: Zarejestrowani
Postów: 90
Pomógł: 4
Dołączył: 14.02.2015

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


możesz pobawić się z bazą danych, przykładowo wystartowanie formularza zakłada rekord w bazie danych, którego ID jest zwracane i przesyłane przez formularz w następnych krokach. Wystartowanie w nowej zakładce formularza założy nowy rekord w bazie danych, jednocześnie powodując, że ID dwóch formularzy będzie inne i wprowadzane dane z różnych zakładek będą dotyczyły tylko konkretnego formularza założonego w danej zakładce. Pomysł z tokenem też nie jest głupi, dla bezpieczeństwa dobrze byłoby zawrzeć unikalny token dla każdego wywołanego formularza.
Go to the top of the page
+Quote Post
com
post
Post #10





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


@up bez sensu, bo wygenerujesz mu zaraz miliard rekordów do bazy smile.gif
Go to the top of the page
+Quote Post
Gizypl
post
Post #11





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 13.09.2012

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


Kurcze - po zastosowaniu metody Sephirusa doszedł nowy prolem - nie mogę stwierdzić czy strona została otwarta w nowej zakładce czy po prostu odświerzona - i wygląda na to że się tego nie przeskoczy bo jedna i druga funkcja działa w oparciu o ten sam mechanizm.
Sposób z bazą to to samo tylko że zamias losowego id generowanego przez php jest id generowane przez baze = te same ograniczenia.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 11:21