Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Sesja a pop-up
Forum PHP.pl > Forum > Przedszkole
escobar1983
Witam mam takie pytanie w jaki sposob przekazac zmienne sesji o zalogowanym uzytowniku do okienka pop-up ?
Problem wyglada tak : Logujemy sie pod jakas podstrone gdzie sa materialy szkoleniowe dla grupy pracownikow i sa tam tez testy ktore utworzylem w php na czas. Dlaczego pop-up? No prosta sprawa blokada odswiezania strony. Teraz jak przenies do tego pop-up dane sesji ? Jest jakis sposob na to? Szukalem i nie moge znalezc. Z gory dziekuje. Pozdrawiam
ddiceman
Dane sesyjne sa dostepne dla wszystkich podstron serwisu przez caly czas trwania sesji o ile nie zostaly one wczesniej zniszczone lub zmianie nie ulegla nazwa sesji. O ile okienko popup wywolywane jest z tej samej subdomeny, co strona inicjujaca dane sesji, to musi miec dostep do wszystkich danych sesji.
Mozliwe, ze w popupie sesji nie zainicjowawales (session_start()) i stad wynika niedostepnosc danych sesyjnych. A tak przy okazji to dodam, ze popup wcale nie uchroni Cie przed mozliwoscia przeladowania strony. Lepiej tutaj sprawdzilby sie token, czy - od biedy - AJAX. Dowod? Majac popup rzed soba wcisnij 'F5'
escobar1983
To bylo naprawde banalne smile.gif Dzieki
a co do F5 to z JS mam jak zablokowac f5 i prawy przycisk myszy. Mysle ze to wystarczy.
A moze ktos wie jak to zrobic ze jesli wpisze w nowej zakladce ten adres z pop-up to automatycznie otwieral sie w pop-up?
Pilsener
Cytat
mam jak zablokowac f5 i prawy przycisk myszy
- akurat. O tym, jakie skrypty JS pozwolę z Twojej strony uruchomić ja będe decydował dlatego, że to na moim komputerze się one wykonują. Mogę nawet w locie dokonać pewnych poprawek w kodzie JS. Poza tym nikt nie musi używać do takich rzeczy przeglądarki - są o wiele lepsze i bardziej przydatne narzędzia, którymi możesz dosłownie zabić stronę a nawet nie musisz na nią wchodzić ani uruchamiać przeglądarki.

Dodaj sobie prosty token:
  1. <?php
  2. ?>
, który ma być stały na początku i końcu testu. Gdy się zmieni oznacza to, że user wysłał nowe żądanie do serwera (odświerzył stronę generując nowy token) i go zabijasz w tym momencie.
escobar1983
jak to zrobic? smile.gif
Pilsener
Taki token służy nadaniu unikalności każdemu formularzowi, jednak u Ciebie nawet tego nie trzeba robić, bo możesz wykorzystać ID rekordu z tabeli, w której zapisujesz wyniki testów:

1. Odpalasz test i dodajesz rekord do bazy, w którym zapisujesz oczywiście ID, kto odpalił test, ip, czas i tak dalej - robisz dodatkowe pole, by zapisywać info o ew. refreshu strony i pola na id_testu, wyniki testu itd.

2. Dodajesz zapytanie updatujące ten rekord (np. zwiększające o 1 wartość pola refresh) przy każdym odświeżeniu strony, które nie jest:
- wywołaniem nowego testu (łatwo to sprawdzić, bo nowy test = nowy ID)
- wysłaniem gotowego testu (to też łatwo sprawdzić)

Możesz też zapisywać licznik odświeżeń za każdym wywołaniem strony, wtedy liczba refereshów musi być równa liczbie przewidzianych akcji, każdy dodatkowy F5 zwiększy licznik o 1 - na podobnej zasadzie działają liczniki odwiedzin winksmiley.jpg

3. Przy akcji wysłania gotowego testu sprawdzasz te dodatkowe pole, czy nie było refreshu, jeśli był to nie pozwalasz wysłać testu lub generujesz test od nowa + odpowiedni komunikat

Ja bym to w ogóle jeszcze prościej zrobił:
Wywołujesz nowy test + czas start, teraz każdy F5 resetuje test i powoduje wygenerowanie formularza od nowa (oczywiście z już innymi pytaniami, innymi kolejnościami odpowiedzi itd.), użytkownik musi wtedy wysłać gotowy test, bo jak odświeży to mu się test zresetuje. Oczywiście wtedy trzeba dać komunikat: "zakaz F5", żeby nie było pretensji, jednak tak proste rozwiązanie ma też oczywiście wady:
- może być problem przy zawieszce przeglądarki lub łącza, użytkownicy często klikają "odśwież"
- taka metoda się sprawdzi tylko wtedy, jeśli mamy jeden etap i nie ma żadnych akcji które wymagają wysłania żądania do serwera
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.