Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: blokada przycisku Wstecz
Forum PHP.pl > Forum > Przedszkole
yahreck
1. Wiem, że nie można zablokować przycisku Wstecz w przeglądarce.
2. Wiem, że temat jest wałkowany co drugi dzień na forum.
3. Wiem jak zrobić żeby formularz nie był zapisany do bazy powtórnie.
4. Nie wiem jak zrobić, żeby nie można było oglądać formularza po jego wysłaniu, a jest to w przypadku mojego skryptu konieczne.

Próbuję nadpisać historię przeglądarki:
wersja 1
plik1:
  1. <a href ="javascript:document.location.replace('plik2')">plik2</a>

ta wersja działa (po przejściu do plik2, w historii przeglądarki nie ma plik1), ale ja potrzebuję wysłać formularz, więc jest to bezużyteczne

wersja 2
w pliku plik1 mam formularz, który przesyła dane do pliku plik2
plik2:
  1. <?php
  2. if (isset($ciasteczko)) 
  3. echo "<br>ciasteczko ustawione";
  4. else{ 
  5. setcookie("ciasteczko","wartosc");
  6. ?>
  7. <script>
  8. document.location.replace('plik2');
  9. </script>
  10. <?php
  11. }
  12. ?>

ta wersja nie działa (w historii przeglądarki jest plik1 i plik2) i nie wiem dlaczego

Nie upieram się przy JS, ale to wydaje mi się jedyne możliwe rozwiązanie.
Uważasz inaczej? Napisz
Z góry dziękuę za ewentualne sugestie.
sf
Ale opisałeś problem, jak dla mnie to wystarczy zrobić po obsłudze formularza header("Location: dziekujemy.php");exit;
yahreck
Tak jak napisałem
Cytat(yahreck @ 6.01.2008, 06:52:57 ) *
... żeby nie można było oglądać formularza po jego wysłaniu, a jest to w przypadku mojego skryptu konieczne.

choć może niejasno się wyraziłem, chodzi mi o to, żeby nie można było oglądać formularza po jego wysłaniu za pomocą przycisku Wstecz w przeglądarce.
Natomiast rozwiązanie
Cytat(sf @ 6.01.2008, 08:30:11 ) *
header("Location: dziekujemy.php");exit;

niestety powoduje dopisanie do historii w przeglądarce, a tego być nie może.
Po za tym, formularz przesyła metodą POST informacje z formularza, które muszą się pokazać po jego wysłaniu, a w przypadku przekierowania header będą utracone.
marcio
Troche to glupie ale znalazlem cos takiego w js "wyłączenie prawego klawisza"
  1. <?php
  2. <script TYPE="text/javascript" LANGUAGE="JavaScript"> 
  3. <!--
  4. if (window.Event)
  5. document.captureEvents(Event.MOUSEUP);
  6.  
  7. function nocontextmenu(){
  8.  
  9. event.cancelBubble = true
  10. event.returnValue = false;
  11. return false;
  12. }
  13.  
  14. function norightclick(e){
  15.  
  16. if (window.Event){
  17. if (e.which == 2 || e.which == 3)
  18. return false;
  19. }
  20. else
  21. if (event.button == 2 || event.button == 3){
  22. event.cancelBubble = true
  23. event.returnValue = false;
  24. return false;
  25. }
  26. }
  27. document.oncontextmenu = nocontextmenu;
  28. document.onmousedown = norightclick;
  29. //-->
  30. </SCRIPT>
  31. ?>

Moze da rade przerobic na lewy przycisk ale wtedy juz user nic nie zrobic chyba ze najpierw zablokujesz a potem przekierujesz na nasteona strone gdzie juz nie bedzie tej funkcji i wciskajac przycisc WSTECZ na tej tronie przeniesie cie do tej gdzie jest blokada i cie znowu przkiereuje na strone na ktorej byles taka jest idea potem czy mozna to zrealizowac to nie wiem
yahreck
Cytat(marcio @ 6.01.2008, 14:25:13 ) *
... "wyłączenie prawego klawisza"...
Moze da rade przerobic na lewy przycisk


Problem w tym, że cofnąć się można na dwa sposoby:
1. myszką - kliknąć na przycisk Wstecz w przeglądarce,
lub
2. klawiaturą - klawiszem Backspace.
marcio
Omg ale masz problemy myslisz ze wszyscy wiedza ze mozna sie cofnac klawiszem backspace ale masz problemy albo jedno albo drugie a pozatym jak idzie zablokowac przycisk myszy i wyciagnac cd za pomoca js to mozesz i idzie zablokowac klawisz backspace albo za pomoca javy nie wiem poszukaj ja sie na tym nie znam
simperium
ja rozwiązałem to w ten sposób, że formularz otwiera się w nowym oknie, po kliknięciu wyślij wysyła dane do pliku w oknie poprzednim, zamykając się... proste i skuteczne smile.gif
HB FreeLancer
Może tak:
I. Strona logowania -> logowanie.html
  1. <!DOCTYPE html>
  2. <title>Blokada przycisku wstecz: logowanie.html</title>
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  4. </head>
  5. Logowanie w PHP (login, hasło) -> Przenosi nas do: strona_1.html<br />
  6. lub szybka piłka:<br />
  7. <a href="strona_1.html">Logowanie</a>
  8. </body>
  9. </html>


II. strona_1.html -> po zalogowaniu:
  1. <!DOCTYPE html>
  2. <title>Blokada przycisku wstecz: strona_1.html</title>
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  4. <script type="text/javascript">
  5. window.history.forward();
  6. function blokujWstecz(){window.history.forward();}
  7. </head>
  8. <body onload="blokujWstecz();" onpageshow="if(event.persisted) blokujWstecz();" onunload="">
  9. <a href="strona_2.html">strona_2</a><br />
  10. <form action="" method="post">
  11. <input type="submit" value="Wyloguj" name="wyloguj" id="wyloguj" />
  12. </form>
  13. <?php
  14. if(isset($_POST['wyloguj']) && $_POST['wyloguj']){
  15. $_SESSION = array(); //Usuwamy wszystkie zmienne sesyjne
  16. session_destroy(); //Niszczymy sesję
  17. setcookie('PHPSESSID','',time()-300,'/','',0); //Sprzątamy po sobie w przeglądarce
  18. header("Location: logowanie.html"); //Przenosimy się do logowanie.html
  19. exit(); //Kończymy
  20. }
  21. ?>
  22. </body>
  23. </html>


III. strona_2.html -> kolejna strona
  1. <!DOCTYPE html>
  2. <title>Blokada przycisku wstecz: strona_2.html</title>
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  4. <script type="text/javascript">
  5. window.history.forward();
  6. function blokujWstecz(){window.history.forward();}
  7. </head>
  8. <body onload="blokujWstecz();" onpageshow="if(event.persisted) blokujWstecz();" onunload="">
  9. <a href="strona_1.html">strona_1</a><br />
  10. <form action="" method="post">
  11. <input type="submit" value="Wyloguj" name="wyloguj" id="wyloguj" />
  12. </form>
  13. <?php
  14. if(isset($_POST['wyloguj']) && $_POST['wyloguj']){
  15. $_SESSION = array(); //Usuwamy wszystkie zmienne sesyjne
  16. session_destroy(); //Niszczymy sesję
  17. setcookie('PHPSESSID','',time()-300,'/','',0); //Sprzątamy po sobie w przeglądarce
  18. header("Location: logowanie.html"); //Przenosimy się do logowanie.html
  19. exit(); //Kończymy
  20. }
  21. ?>
  22. </body>
  23. </html>


itd. kolejne strony.

Po wylogowaniu i powrotu do pliku logowanie.html przyciskiem WSTECZ nie można już wrócić
do strona_1.html, strona_2.html i następnych, natomiast można się ponownie zalogować.
Shido
Mi przyszło do głowy raczej zablokowanie strony formularza:

Strona prowadząca do formularza:
  1. $_SESSION["xyz"] = true;


formularz:
  1. if(isset($_SESSION["xyz"])
  2. {
  3. exit();
  4. }
  5. else
  6. {
  7. formularz
  8. }


Strona zapisująca formularz:
  1. unset($_SESSION["xyz"]);


Mam nadzieje że nie pokopałem nazw funkcji tongue.gif
Tak czy inaczej w teorii, bez zainicjowania wysłania nowego formularza nie powinno dać się cofnąć i obejrzeć formularz.

@down.
Huh... nie zwróciłem uwagi :<
b4rt3kk
Po co odgrzewacie stare koltlety? 16.01.2008 ostatni post był? Gość ewidentnie chciał zareklamować swoją stronkę, więc się wpisał w pierwszy lepszy temat, na który umiał udzielić odpowiedzi.
HB FreeLancer
Witam!
Oczywiście temat ten jest wałkowany na różnych forach.
Owszem, przeglądałem i czytałem.
Dlatego usystematyzujmy zagadnienie:
1. Problem dotyczy logowania do określonego zasobu stron znajdujących się w jakimś katalogu.
2. Chcemy, aby tylko osoby mające login i hasło miały do niego dostęp.
3. Dlatego musimy im to udostępnić poprzez formularz logowania z możliwością wylogowania się.

Jak najbardziej możemy to zrobić jak Pan Shido zaproponował i na wiele jeszcze innych sposobów.
Pozostanie zawsze problem z przyciskiem WSTECZ przeglądarki.

Tutaj musimy sobie odpowiedzieć na pytanie - dlaczego (odpowiedź nie dla znawców PHP)?
(takie fora przeglądają również osoby, które dopiero się uczą - to dla nich)

Łopatologia poglądowa!!!
Załóżmy, że przygotowaliśmy stronę z formularzem (PHP), która umieszczona jest na serwerze.
Wpisując adres tej strony (z formularzem) w przeglądarce internetowej i klikając np. Enter,
wysyłamy żądanie poprzez protokół HTTP do jej wyświetlenia na monitorze naszego komputera.

Co dzieje sie po stronie serwera po wysłaniu żadania?
Interpreter PHP (po stronie serwera) przetwarza naszą stronę z formularzem, która z kolei po przetworzeniu
zwracana jest do naszej przeglądarki w postaci kodu HTML (źródło kodu możemy podejrzeć).
Każdą tak zawróconą stronę przeglądarka zapisuje w swojej pamięci, by móc ją odtworzyć po wciśnięciu
przycisku WSTECZ (czyli możemy wracać się do stron, które wcześniej pobraliśmy przez wpisnie adresu WWW
lub kliknięcie w link) - jest to historia przglądanych przez nas stron, którą możemy podejrzeć lub usunąć.
To tyle co do mechanizmu w uproszczeniu.

Otóż, te dwa byty: interpreter PHP i przeglądarka internetowa wykonują swoją robotę niezależnie od siebie.
Pierwszy po stronie Serwera, drugi po stronie Klienta. Przeglądarka ma w "nosie" to co wyprawia interpreter PHP.
Czeka na gotowy kod, by go wyświetlić.
Dlatego jakiekolwiek próby, ujarzmienia przycisku WSTECZ kodem PHP nie będzie skuteczne.
Przynajmniej ja niczego takiego nie znam.

Dlatego wrzuciłem kawałek kodu, który możecie przetestować i ewentualnie wprowadzić jakieś
udoskonalenia lub poprawki. Chętnie skorzystam z takich nowości.

P.S.
Jeżeli użyjemy protokołu HTTPS, wówczas przeglądarka będzie wiedziała jak się zachować.
Oczywiście, aby móc to robić musimy liczyć sie z kosztami certyfikatu.

................................................................................
...............................................................................
Mam nadzieję, że nie zostanę zlinczowany, bo pierwsze oznaki bynajmniej na to wskazują,
Uważam, że każdy pogląd jest cenny, nawet błędny czy prymitywny.

Pan b4rt3kk bynajmniej, niezbyt przychlnie się do mnie ustosunkował, ale być może to tylko
taka niezręczna gafa?

Pozdrawiam.

binprogrammer
Cytat
Omg ale masz problemy myslisz ze wszyscy wiedza ze mozna sie cofnac klawiszem backspace ale masz problemy albo jedno albo drugie a pozatym jak idzie zablokowac przycisk myszy i wyciagnac cd za pomoca js to mozesz i idzie zablokowac klawisz backspace albo za pomoca javy nie wiem poszukaj ja sie na tym nie znam


zmieniłeś moje życie tym zdaniem, od teraz używam bs biggrin.gif
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.