![]() |
![]() |
![]()
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ąć. |
|
|
![]() |
![]()
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.
|
|
|
![]()
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.
|
|
|
![]()
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 |
|
|
![]()
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][...] |
|
|
![]()
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. |
|
|
![]()
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 ![]() -------------------- 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... |
|
|
![]()
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 |
|
|
![]()
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.
|
|
|
![]()
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
![]() |
|
|
![]()
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. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 11:21 |