Le bouton de retour du navigateur nous permet de revenir facilement aux pages précédemment visitées, ce qui est sans aucun doute très utile. Mais parfois, nous devons désactiver cette fonctionnalité pour
empêcher les utilisateurs de perturber la séquence d'accès planifiée à la page. Cet article présente diverses solutions pour désactiver le bouton Précédent du navigateur que l'on peut trouver sur Internet, en analysant leurs avantages, inconvénients et occasions respectifs.
1. Présentation
De nombreuses personnes ont demandé : « Comment puis-je « désactiver » le bouton Précédent du navigateur ? est également l'une des questions les plus fréquemment posées sur le forum ASP. Malheureusement, la réponse est très simple : nous ne pouvons pas désactiver le bouton retour
du navigateur.
Au début, j'étais incrédule que quelqu'un veuille désactiver le bouton de retour du navigateur. Plus tard, j'ai été soulagé de voir que tant de gens voulaient désactiver le bouton retour
(les seuls qu'ils voulaient désactiver étaient le bouton retour, pas le bouton avant du navigateur). Parce que par défaut, une fois que l'utilisateur a soumis le formulaire, il peut revenir à la page du formulaire via le bouton
retour (au lieu d'utiliser le bouton « Modifier » !), puis modifier et soumettre à nouveau le formulaire pour insérer de nouveaux enregistrements dans la base de données. C’est quelque chose que nous ne voulons pas voir.
J'ai donc décidé de trouver un moyen d'éviter cette situation. J'ai visité de nombreux sites Web et consulté diverses méthodes de mise en œuvre introduites par ces sites Web. Si vous
visitez fréquemment les sites Web de programmation ASP, vous avez peut-être vu une partie du contenu présenté dans cet article. La tâche de cet article est de présenter toutes les méthodes possibles à tout le monde, puis de trouver
la meilleure méthode !
2. Désactiver la mise en cache
Parmi les nombreuses solutions que j'ai trouvées, l'une d'entre elles suggérait de désactiver la mise en cache des pages. Plus précisément, utilisez un script côté serveur comme suit :
Response.Buffer = True
Response.ExpiresAbsolute = Now() - 1
Response.Expires = 0 Response.CacheControl = "no-cache"
%>
Cette méthode est très efficace ! Cela oblige le navigateur à revisiter le serveur pour télécharger la page au lieu de lire la page à partir du cache. Lors de l'utilisation de cette méthode, la tâche principale du programmeur est de créer une variable au niveau de la session qui détermine si l'utilisateur peut toujours afficher la page qui ne convient pas à l'accès via le bouton Précédent. Étant donné que le navigateur
ne met plus la page en cache, le navigateur téléchargera à nouveau la page lorsque l'utilisateur clique sur le bouton de retour, et le programme peut alors vérifier cette variable de session pour voir si
l'utilisateur doit être autorisé à ouvrir la page.
Par exemple, supposons que nous ayons la forme suivante :
Response.Buffer = True
Response.ExpiresAbsolute = Now() - 1
Response.Expires = 0
Response .CacheControl = "no-cache" If Len(Session("FirstTimeToPage")) > 0 then
&single; L'utilisateur a visité la page actuelle et revient maintenant pour la visiter à nouveau.
&single; Effacez les variables de session et redirigez l'utilisateur vers la page de connexion.
Session("FirstTimeToPage") = ""
Response.Redirect "/Bar.asp"
Response.End
End If
&single; l'utilisateur peut voir la page actuelle
&single; Ce qui suit commence à créer le formulaire
%>
code suivant :
Session("FirstTimeToPage") = "NO"
De cette façon, si l'utilisateur qui a ouvert SomePage.asp clique sur le retour bouton, le navigateur sera à nouveau invité à télécharger la page. Le serveur vérifie que Session
("FirstTimeToPage") contient une valeur, il efface donc Session("FirstTimeToPage") et redirige l'utilisateur vers d'autres pages. Bien entendu,
tout cela nécessite que l'utilisateur active les cookies, sinon les variables de session seront invalides.(Untuk penjelasan lanjut tentang masalah ini, lihat Untuk pembolehubah sesi
untuk berfungsi, mesti pelawat Web mendayakan kuki?)
Selain itu, kami juga boleh menggunakan kod sisi klien untuk menghalang penyemak imbas daripada menyimpan halaman Web:
Jika anda menggunakan kaedah di atas untuk memaksa penyemak imbas untuk tiada cache lagi Untuk halaman web, anda mesti memberi perhatian kepada perkara berikut:
"Pragma: no-cache" hanya menghalang penyemak imbas daripada menyimpan halaman dalam cache apabila menggunakan sambungan selamat. Untuk halaman yang tidak dilindungi oleh keselamatan, "Pragma: no-cache"
dianggap sama seperti "Tamat tempoh: -1 Pada masa ini, penyemak imbas masih menyimpan cache halaman, tetapi menandakan halaman sebagai tamat tempoh serta-merta.
Dalam IE 4 atau 5, teg "Cache-Control" META HTTP-EQUIV akan diabaikan dan tidak akan memberi kesan.
Dalam aplikasi praktikal kita boleh menambah semua kod ini. Walau bagaimanapun, kerana kaedah ini tidak berfungsi dalam semua pelayar, ia tidak disyorkan. Tetapi
Jika ia adalah persekitaran intranet dan pentadbir boleh mengawal penyemak imbas yang digunakan oleh pengguna, saya rasa sesetengah orang masih akan menggunakan kaedah ini.
3. Kaedah lain
Kaedah yang akan kita bincangkan seterusnya adalah berpusat pada butang belakang itu sendiri, bukan cache penyemak imbas. Berikut ialah artikel Pendawaian Semula Butang Belakang yang
patut dirujuk. Walau bagaimanapun, saya perhatikan bahawa jika kaedah ini digunakan, walaupun pengguna tidak akan melihat halaman tempat dia memasukkan data sebelum ini apabila dia mengklik butang kembali, dia hanya perlu mengklik dua kali
Ini bukan kesan yang kita mahu, kerana Banyak kali, pengguna yang degil dapat mencari cara untuk memintas langkah pencegahan.
Cara lain untuk melumpuhkan butang belakang ialah menggunakan JavaScript sisi klien untuk membuka tetingkap tanpa bar alat Ini menyukarkan pengguna untuk kembali ke halaman sebelumnya, tetapi
tidak mustahil. Kaedah yang lebih selamat, tetapi agak menjengkelkan ialah membuka tetingkap baharu apabila borang diserahkan dan pada masa yang sama menutup tetingkap di mana borang itu terletak. Tetapi saya rasa
kaedah ini tidak layak dipertimbangkan dengan serius, kerana kami tidak boleh membenarkan pengguna membuka tetingkap baharu setiap kali mereka menyerahkan borang.
Jadi, bolehkah kami menambahkan kod JavaScript pada halaman yang kami tidak mahu pengguna kembali? Kod JavaScript yang ditambahkan pada halaman ini boleh
digunakan untuk menghasilkan kesan mengklik butang ke hadapan, sekali gus mengatasi tindakan yang disebabkan oleh pengguna mengklik butang kembali. Kod JavaScript yang digunakan untuk melaksanakan fungsi ini adalah seperti berikut
:
Sekali lagi, walaupun kaedah ini berkesan, ia masih jauh daripada "kaedah terbaik". Kemudian, saya melihat seseorang mencadangkan menggunakan location.replace untuk berpindah dari satu
halaman ke halaman yang lain. Prinsip kaedah ini adalah untuk menggantikan rekod sejarah semasa dengan URL halaman baharu, supaya hanya terdapat satu halaman dalam sejarah penyemakan imbas dan butang
kembali tidak pernah tersedia. Saya fikir ini mungkin yang dicari oleh ramai orang, tetapi ia masih bukan pendekatan terbaik dalam setiap situasi. Contoh penggunaan kaedah
ini adalah seperti berikut:
Lumpuhkan pautan kembali ke halaman ini
Cuba pautan ini:
Lumpuhkan pautan kembali ke halaman ini!
Kelemahan pendekatan ini ialah hanya menggunakan Response.Redirect tidak akan berfungsi lagi kerana setiap kali pengguna pergi dari satu halaman ke halaman yang lain,
kami perlu mengosongkan location.history dengan kod klien . Juga ambil perhatian bahawa kaedah ini mengosongkan rekod sejarah akses terakhir, bukan semua
rekod akses.
Klik pautan di atas dan anda akan membuka halaman HTML yang mudah. Klik butang kembali sekali lagi, dan anda dapat melihat bahawa yang dibuka bukanlah halaman ini, tetapi halaman
sebelum halaman ini! (Sudah tentu, anda mesti mendayakan kod JavaScript sisi klien dalam penyemak imbas.)
Selepas beberapa carian teliti, saya mendapati bahawa saya masih tidak dapat mencari cara untuk melumpuhkan butang belakang penyemak imbas sepenuhnya. Semua kaedah
yang diterangkan di sini boleh menghalang pengguna daripada kembali ke halaman sebelumnya pada tahap yang berbeza-beza dan dengan cara yang berbeza, tetapi semuanya mempunyai had mereka sendiri. Memandangkan tiada cara untuk melumpuhkan sepenuhnya butang belakang <script> <BR><!-- <BR>javascript:window.history.forward(1); <BR>//--> <BR></script>, penyelesaian terbaik ialah menggunakan gabungan skrip bahagian klien dan bahagian pelayan.