ปิดใช้งานปุ่มย้อนกลับของเบราว์เซอร์


98

จะปิดการใช้งานปุ่มย้อนกลับของเบราว์เซอร์ (ข้ามเบราว์เซอร์) ได้อย่างไร?


92
คุณไม่ได้เป็นเจ้าของคอมพิวเตอร์หรือเบราว์เซอร์ของผู้ใช้
Instance Hunter

47
+1 เนื่องจากแม้ว่าฉันจะยอมรับว่าการปิดใช้งานปุ่มย้อนกลับของเบราว์เซอร์เป็น 'การปฏิบัติที่ไม่ดี' แต่ฉันก็ไม่เห็นเหตุผลที่จะลดคะแนนคำถามเองตอบและอธิบายว่าเหตุใดจึงต้องใช้ imo
ChristopheD

45
ทำไมเราถึงเป็นศัตรูกับคำถามนี้? สำหรับทุกสิ่งที่เรารู้คนที่ถามคำถามนี้รู้อยู่แล้วว่านี่เป็นการใช้งานที่ไม่ดี แต่ทำตามข้อกำหนดเท่านั้นหรือบางทีพวกเขาต้องการเรียนรู้บางอย่าง ทำไมเราไม่แสร้งทำเป็นว่านี่เป็นคำถามสมมุติและตอบว่าเราจะทำอย่างไรถ้าเราจะทำสิ่งนั้น?
thomasrutter

5
บางสิ่งไม่ควรทำไม่ว่าจะปรารถนาสิ่งใดก็ตาม การมีข้อกำหนดที่ไม่สามารถต่อรองได้สำหรับสิ่งนี้ทันทีบอกว่าข้อกำหนดนี้ถูกกำหนดโดยผู้ที่ไม่มีธุรกิจกำหนดซึ่งเป็นปัญหาที่ใหญ่กว่ามาก
annakata

37
เอ่อฉันเขียนความคิดเห็นที่ยอดเยี่ยมที่สุดเท่าที่เคยมีมา แต่ทำหายไปเมื่อฉันกดปุ่มย้อนกลับโดยไม่ได้ตั้งใจ
Dan Williams

คำตอบ:


26

คำถามนี้เป็นคำถามคล้ายกันมากกับเรื่องนี้อย่างใดอย่างหนึ่ง ...

คุณต้องบังคับให้แคชหมดอายุเพื่อให้สามารถใช้งานได้ วางโค้ดต่อไปนี้ไว้ด้านหลังโค้ดเพจของคุณ

Page.Response.Cache.SetCacheability(HttpCacheability.NoCache)

14
โปรดทราบว่าการทำให้หน้าไม่สามารถแคชไม่ได้เป็นไปตามที่ OP ต้องการ: ปิดการใช้งานการเยี่ยมชมเพจโดยใช้ปุ่มย้อนกลับ แม้ว่าเบราว์เซอร์จะไม่ปฏิบัติตามการไม่มีแคชเมื่อใช้ปุ่มย้อนกลับ (ซึ่งเบราว์เซอร์ไม่จำเป็นต้องทำ AFAIK) พวกเขายังคงมีวิธีการโหลดหน้านั้นซ้ำ (โดยปกติจะแสดงข้อความเตือน) ดังนั้นหากคุณไม่ต้องการให้ผู้ใช้ของคุณกลับไปที่หน้านั้นจริงๆอาจจะแย่กว่านี้เนื่องจากคำขอสำหรับหน้านั้นจะต้องดำเนินการไปยังเซิร์ฟเวอร์ต้นทาง คุณจะต้องมีบางอย่างที่ฝั่งเซิร์ฟเวอร์เพื่อตรวจสอบว่ามีการเยี่ยมชมเพจนี้อีกครั้ง ส่วนหัวสามารถละเว้นได้
thomasrutter

60

อย่าปิดการทำงานของเบราว์เซอร์ที่คาดไว้

ทำให้เพจของคุณรองรับความเป็นไปได้ที่ผู้ใช้จะย้อนกลับไปหนึ่งหรือสองหน้า อย่าพยายามทำให้ซอฟต์แวร์ของพวกเขาพิการ


6
ขอบคุณเพื่อนสิ่งนี้ก็คือหากคุณกำลังสร้างแอป AJAX การแลกเปลี่ยนผลประโยชน์ด้านต้นทุนระหว่างการปิดใช้งานปุ่มย้อนกลับหรือการใช้งานแอปของคุณและดำเนินการย้อนกลับที่เหมาะสมสำหรับแต่ละสถานการณ์ที่เป็นไปได้อาจมีแนวโน้มที่จะปิดใช้งาน ปุ่มย้อนกลับเป็นตัวเลือกที่น่าสนใจยิ่งขึ้นของทั้งสอง
david.barkhuizen

ฉันเห็นด้วยกับโจนาธานโดยเฉพาะอย่างยิ่งเมื่อมีโฆษณามัลแวร์เปลี่ยนเส้นทางที่กำลังท่วมท้นในอินเทอร์เน็ตพวกเขาใช้ระบบการแจ้งเตือนในทางที่ผิดเพื่อให้ออกจากหน้าเว็บได้ยากโดยไม่ให้พวกเขาสามารถล็อกคุณเข้าสู่หน้าได้
MikeT

46

ฉันคิดแฮ็คเล็กน้อยที่ปิดใช้งานปุ่มย้อนกลับโดยใช้ JavaScript ฉันตรวจสอบบน chrome 10, firefox 3.6 และ IE9:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<title>Untitled Page</title>
<script type = "text/javascript" >
function changeHashOnLoad() {
     window.location.href += "#";
     setTimeout("changeHashAgain()", "50"); 
}

function changeHashAgain() {
  window.location.href += "1";
}

var storedHash = window.location.hash;
window.setInterval(function () {
    if (window.location.hash != storedHash) {
         window.location.hash = storedHash;
    }
}, 50);


</script>
</head>
<body onload="changeHashOnLoad(); ">
Try to hit the back button!
</body>
</html>

มันทำอะไร?

จากความคิดเห็น:

สคริปต์นี้ใช้ประโยชน์จากข้อเท็จจริงที่ว่าเบราว์เซอร์พิจารณาสิ่งที่เกิดขึ้นหลังเครื่องหมาย "#" ใน URL เป็นส่วนหนึ่งของประวัติการเข้าชม สิ่งนี้คืออะไร: เมื่อหน้าเว็บโหลด "# 1" จะถูกเพิ่มลงใน URL หลังจาก 50 มิลลิวินาที "1" จะถูกลบออก เมื่อผู้ใช้คลิก "ย้อนกลับ" เบราว์เซอร์จะเปลี่ยน URL กลับไปเป็น URL ก่อนที่จะลบ "1" แต่เป็นหน้าเว็บเดียวกันดังนั้นเบราว์เซอร์จึงไม่จำเป็นต้องโหลดหน้าซ้ำ - ยอสซีชาโช


1
ดูเหมือนว่าสคริปต์นี้จะเพิ่ม "#" ให้กับ URL เมื่อหน้าเว็บโหลดและทุกๆ 50 มิลลิวินาทีจะเพิ่ม 1 ต่อท้าย URL
ashes999

6
สคริปต์นี้ใช้ประโยชน์จากข้อเท็จจริงที่ว่าเบราว์เซอร์พิจารณาสิ่งที่เกิดขึ้นหลังเครื่องหมาย "#" ใน URL เป็นส่วนหนึ่งของประวัติการเข้าชม สิ่งนี้คืออะไร: เมื่อหน้าเว็บโหลด "# 1" จะถูกเพิ่มลงใน URL หลังจาก 50 มิลลิวินาที "1" จะถูกลบออก เมื่อผู้ใช้คลิก "ย้อนกลับ" เบราว์เซอร์จะเปลี่ยน URL กลับไปเป็น URL ก่อนที่จะลบ "1" แต่เป็นหน้าเว็บเดียวกันดังนั้นเบราว์เซอร์จึงไม่จำเป็นต้องโหลดหน้าซ้ำ
Yossi Shasho

1
โปรดทราบว่า URL มีการเปลี่ยนแปลงสองครั้ง: เราทำสิ่งนี้เพื่อปิดบังการใช้งานเท่านั้นดังนั้นจะไม่มีใครเห็นว่าเราเพิ่ม "1" ดังนั้นเมื่อผู้ใช้คลิกย้อนกลับหน้าเว็บจะเพิ่ม "# 1" อีกครั้งและลบอีก BTW - ไม่จำเป็นต้องเป็น "1" แต่อาจเป็นสตริงใดก็ได้
Yossi Shasho

2
ปัญหานี้คือหน้าจะเลื่อนไปด้านบนทุกๆ 50 มิลลิวินาที หากคุณมีแบบฟอร์มที่ใหญ่กว่าความสูงของหน้าต่างจะทำให้ไม่สามารถกรอกค่าแบบฟอร์มได้
3komma14

ขอบคุณมาก ๆ. นี่เป็นประโยชน์อย่างยิ่งสำหรับหน้าเว็บแบบโต้ตอบที่ใช้ JavaScript โดยเฉพาะที่ฉันมีซึ่งการเลื่อนไปทางซ้ายและขวาเป็นส่วนหนึ่งของกลไก วิธีนี้ช่วยขจัดปัญหาของท่าทางการเลื่อนบน Mac OS X ที่ทำให้ผู้ใช้ "ย้อนกลับ" ไปที่หน้าโดยไม่ได้ตั้งใจ (ทั้งหมดนี้ทำได้ง่ายหากมีการเลื่อนไปจนสุดแล้ว)
Iain Collins

34

คนอื่น ๆ ใช้วิธีบอกว่า "อย่าทำ" แต่นั่นไม่ได้ตอบคำถามของผู้โพสต์อย่างแท้จริง สมมติว่าทุกคนรู้ว่านี่เป็นความคิดที่ไม่ดี แต่เราอยากรู้ว่ามันเป็นอย่างไร ...

คุณไม่สามารถปิดใช้งานปุ่มย้อนกลับบนเบราว์เซอร์ของผู้ใช้ แต่คุณสามารถทำให้แอปพลิเคชันของคุณหยุดทำงานได้ (แสดงข้อความแสดงข้อผิดพลาดทำให้ผู้ใช้ต้องเริ่มต้นใหม่) หากผู้ใช้กลับไป

แนวทางหนึ่งที่ฉันได้เห็นในการทำเช่นนี้คือการส่งโทเค็นในทุก URL ภายในแอปพลิเคชันและในทุกรูปแบบ โทเค็นจะถูกสร้างขึ้นใหม่ในทุกหน้าและเมื่อผู้ใช้โหลดหน้าใหม่โทเค็นจากหน้าที่แล้วจะไม่ถูกต้อง

เมื่อผู้ใช้โหลดเพจเพจจะแสดงก็ต่อเมื่อมีการส่งโทเค็นที่ถูกต้อง (ซึ่งมอบให้กับลิงก์ / แบบฟอร์มทั้งหมดในเพจก่อนหน้านี้)

แอปพลิเคชันธนาคารออนไลน์ที่ธนาคารของฉันมีให้เป็นแบบนี้ หากคุณใช้ปุ่มย้อนกลับเลยลิงก์จะไม่ทำงานอีกต่อไปและไม่สามารถโหลดหน้าเว็บซ้ำได้อีกต่อไป แต่คุณจะเห็นข้อความแจ้งว่าคุณไม่สามารถย้อนกลับได้และคุณต้องเริ่มต้นใหม่


1
ธนาคารของฉันใช้แนวทางที่แตกต่างออกไปซึ่งจะยุติเซสชันทั้งหมด การใช้ปุ่มย้อนกลับจะเทียบเท่ากับการออกจากระบบ
RobG

ดูเหมือนจะเป็นแนวทางเดียวกัน พวกเขาตรวจพบว่าคุณย้อนกลับไปและเกิดข้อผิดพลาดขึ้น
thomasrutter

นอกจากนี้ joomla ยังทำงานกับโซลูชันโทเค็นโทเค็นถูกสร้างขึ้นโดยทุกหน้าและทุกรูปแบบมีปัญหาบางอย่างเกี่ยวกับการปฏิบัตินี้เช่น "เมื่อผู้ใช้อยู่บนหน้าเว็บมากเกินไปและโทเค็นของเขาจะหมดอายุ"
Matteo Bononi 'peorthyr'

1
อย่าเข้าใจฉันผิดมีปัญหามากมายในการปฏิบัตินี้ ฉันไม่ได้แนะนำมันฉันแค่บอกว่ามันทำได้ตามปกติ โดยจะส่งโทเค็นที่ไม่ซ้ำกันระหว่างหน้าต่างๆเพื่อตรวจสอบว่าคุณไม่ได้ติดตามลิงก์ที่คาดไว้จากหน้าก่อนหน้าจากนั้นจึงยุติเซสชันหรือแสดงข้อผิดพลาด มันทำลายปุ่มย้อนกลับมันหยุดการเรียกดูแบบแท็บมันแบ่งบุ๊กมาร์กและ / หรือการแชร์ลิงค์และอื่น ๆ - และยิ่งไปกว่านั้นมันไม่ได้ช่วยแก้ปัญหาใด ๆ เลย
thomasrutter

หากปัญหาคือข้อมูลสูญหายหรือขาดไปแล้วหากผู้ใช้ลองใช้ปุ่มย้อนกลับการปิดใช้งานปุ่มย้อนกลับจะเป็นแนวทางที่ต้องการมากกว่า
PoloHoleSet

10

ในขณะที่ฉันกำลังหาคำตอบด้วยตัวเอง "แนวทางปฏิบัติที่ดีที่สุด" นั้น .... ล้าสมัย ... เช่นเดียวกับเบราว์เซอร์ (เบราว์เซอร์จริงๆเป็นฟอสซิลที่น่าเกลียด)

ทางออกที่ดีที่สุด / ปลอดภัยที่สุดคือเบราว์เซอร์ใช้วิธีการ / คำขอที่ผู้ใช้สามารถให้ความสามารถในการควบคุมอินเทอร์เฟซแก่เพจได้

ทำไม? เพราะสำหรับโปรเจ็กต์ปัจจุบันของฉันฉันกำลังสร้างอินเทอร์เฟซที่สร้างและควบคุมด้วย JavaScript 100% .. และปุ่มย้อนกลับไม่มีตำแหน่งใดในโปรเจ็กต์ของฉันเนื่องจากไม่มีการเปลี่ยนเพจ (คือเลือดไหลเร็วและไม่มีหน้ากะพริบเพราะรีเฟรช .. เหมือนแอปพลิเคชันจริง!)

ฉันรู้ว่าทำไมความสามารถในการ "ไฮแจ็ค" ถึงไม่มีอินเทอร์เฟซและฉันก็เข้าใจ แต่อย่างน้อยเราควรมีความสามารถในการขอจากเบราว์เซอร์! ตอนนี้นั่นจะเป็น "แนวทางปฏิบัติที่ดีที่สุด" อย่างแท้จริงโดยไม่มีอันตรายจากการเล่นไฮแจ็ค

แต่เบราว์เซอร์เป็นเบราว์เซอร์ .. ฉันไม่คิดว่าจะมีอะไรเกิดขึ้นในเรื่องนี้


1
ไม่เห็นด้วย 100% ในขณะที่ฟังก์ชันนี้ยอดเยี่ยมสำหรับนักพัฒนาเว็บ 99% ซึ่งทำให้เหลืออีก 1% ที่จะใช้ฟังก์ชันนี้ในทางที่ผิดมันเป็นวิธีที่อันตรายเกินไปที่จะอนุญาตให้เว็บไซต์ควบคุมความสามารถในการใช้อินเทอร์เน็ตของคุณในความคิดของฉัน สคริปต์การเปลี่ยนเส้นทางข้ามโดเมนจำเป็นต้องมีการแบนหรืออนุญาตให้ยืนยันว่าสคริปต์ได้รับอนุญาตให้ทำงานเนื่องจากการละเมิดประเภทนี้หรือไม่
MikeT

@MikeT - การปิดใช้งานปุ่ม "ย้อนกลับ" ในขณะที่ไปที่หน้าแอปพลิเคชันเฉพาะของฉันเองจะขัดขวางความสามารถในการใช้อินเทอร์เน็ตของใครก็ตาม
PoloHoleSet

@PoloHoleSet หากคุณมีความสามารถในการปิดใช้งานปุ่มย้อนกลับของเบราว์เซอร์ทุกคนก็เช่นกันสิ่งที่คุณต้องมีคือการเปลี่ยนเส้นทางเพื่อส่งคุณไปยังหน้าที่คุณไม่ต้องการไปและหากพวกเขาสามารถปิดการใช้งานการควบคุมการนำทางในเบราว์เซอร์ได้อย่างไร คุณหนี? ฉันแน่ใจว่าคุณเจอ "หน้าคุณมีไวรัส" ซึ่งพวกเขาแจ้งให้คุณติดตั้งไวรัสเพื่อลบไวรัสที่ไม่มีอยู่จริงตอนนี้ลองนึกดูว่าไซต์นั้นสามารถป้องกันไม่ให้คุณออกไปได้อย่างไร
MikeT

@MikeT - ฉันสามารถป้อน url อื่น ๆ ในหน้าต่างนำทางฉันสามารถปิดแท็บฉันสามารถปิดการใช้งานจาวาสคริปต์ ประเด็นไม่ได้อยู่ที่ว่าใครทำได้เพราะคุณทำได้ฉันทำได้ทุกคนทำได้ ตามนโยบายแล้วผู้คนต่างบอกว่าคุณไม่ควรถ้าทำได้ เราไม่ได้พูดถึงวิธีการออกแบบเบราว์เซอร์เรากำลังพูดถึงวิธีที่เราตั้งโปรแกรมแอปพลิเคชัน
PoloHoleSet

@PoloHoleSet หากคุณกำลังจะล็อกการนำทางคุณจะต้องล็อกมากกว่าปุ่มย้อนกลับเนื่องจากประวัติเบราว์เซอร์และ URL ที่พิมพ์จะช่วยให้ผู้ใช้สามารถข้ามขั้นตอนการทำงานของคุณได้ และอย่างที่ฉันบอกว่าเราไม่ได้พูดถึงสิ่งที่คุณหรือฉันจะทำ แต่เป็นองค์ประกอบที่เป็นอันตรายหากวิธีเดียวที่จะป้องกันไม่ให้เว็บไซต์ที่เป็นอันตรายเข้าควบคุมเบราว์เซอร์ของคุณคือปิดการใช้งาน js ทั้งหมดบนเบราว์เซอร์ของคุณจากนั้นคุณจะทำลายอินเทอร์เน็ต เว็บสมัยใหม่ต้องอาศัยสคริปต์เพื่อให้เนื้อหาซึ่งเป็นประเด็นของฉันหากคุณต้องการให้ผู้ใช้ควบคุมได้มากขนาดนั้นให้สร้างแอปเพื่อให้บริการเวิร์กโฟลว์ของคุณ
MikeT

4

ฉันกำลังค้นหาคำถามเดียวกันและพบรหัสต่อไปนี้ในไซต์ คิดจะแบ่งปันที่นี่:

function noBack()
{
   window.history.forward()
}
noBack();
window.onload = noBack;
window.onpageshow = function(evt){ if(evt.persisted) noBack(); }
window.onunload = function(){ void(0); }

อย่างไรก็ตามตามที่ระบุไว้โดยผู้ใช้ข้างต้นนี่ไม่ใช่แนวปฏิบัติที่ดีและควรหลีกเลี่ยงด้วยเหตุผลทั้งหมด


2
จะเป็นการดีถ้าคุณสามารถระบุสาเหตุที่ควรหลีกเลี่ยง
Chris Snow

ตามความเข้าใจของฉันในทางเทคนิคคุณไม่สามารถปิดใช้งานปุ่มย้อนกลับบนเบราว์เซอร์ของใครบางคนได้คุณสามารถทำให้ปุ่มนั้นไม่สามารถใช้งานได้หรือโหลดหน้าเดิมต่อไป แทนที่จะทำผ่าน JS ให้ใช้โค้ดฝั่งเซิร์ฟเวอร์และใช้ตรรกะที่เหมาะสมซึ่งไม่จำเป็นต้องใช้ปุ่มย้อนกลับ ควรใช้การดำเนินการอื่นเช่นการโหลดหน้าเดิมซ้ำหรือแสดงข้อความที่กำหนดเอง
user704988

2

หากคุณพึ่งพาเทคโนโลยีฝั่งไคลเอ็นต์ก็สามารถหลีกเลี่ยงได้ Javascript อาจถูกปิดใช้งานตัวอย่างเช่น หรือผู้ใช้อาจเรียกใช้สคริปต์ JS เพื่อแก้ไขข้อ จำกัด ของคุณ

ฉันเดาว่าคุณสามารถทำได้โดยการติดตามฝั่งเซิร์ฟเวอร์ของเซสชันผู้ใช้และเปลี่ยนเส้นทาง (เช่นเดียวกับใน Server.Transfer ไม่ใช่ Response.Redirect) ผู้ใช้ / เบราว์เซอร์ไปยังหน้าที่ต้องการ



2

มีการใช้งานที่แตกต่างกันเล็กน้อย มีโซลูชันแฟลชและโซลูชัน iframe / frame สำหรับ IE ตรวจสอบสิ่งนี้

http://www.contentwithstyle.co.uk/content/fixing-the-back-button-and-enabling-bookmarking-for-ajax-apps

BTW: มีเหตุผลที่ถูกต้องมากมายในการปิดใช้งาน (หรืออย่างน้อยก็ป้องกัน 1 ขั้นตอน) ปุ่มย้อนกลับ - ดูที่ gmail เป็นตัวอย่างที่ใช้โซลูชันแฮชที่กล่าวถึงในบทความข้างต้น

Google "วิธีที่ ajax หักปุ่มย้อนกลับ" และคุณจะพบบทความมากมายเกี่ยวกับการทดสอบผู้ใช้และความถูกต้องของการปิดใช้งานปุ่มย้อนกลับ


ลองใช้โปรแกรมดูรูปภาพใหม่ของ Facebook ด้วย โปรดสังเกตว่าปุ่มย้อนกลับจะนำคุณกลับรูปภาพ (ซึ่งเป็นสิ่งที่คุณต้องการ) แทนที่จะใช้ค่าเริ่มต้นของเบราว์เซอร์
DallinDyer

2

ฉันก็มีปัญหาเดียวกันใช้ฟังก์ชัน Java script นี้บน head tag หรือในมันทำงานได้ดี 100% จะไม่ปล่อยให้คุณย้อนกลับไป

 <script type = "text/javascript" >
      function preventBack(){window.history.forward();}
        setTimeout("preventBack()", 0);
        window.onunload=function(){null};
    </script>

1

ลองใช้รหัสนี้ ทำงานให้ฉัน โดยทั่วไปจะเปลี่ยนแฮชทันทีที่โหลดหน้าเว็บซึ่งจะเปลี่ยนหน้าประวัติล่าสุดโดยการเพิ่ม "1" ใน URL ดังนั้นเมื่อคุณกดปุ่มย้อนกลับระบบจะเปลี่ยนเส้นทางไปยังหน้าเดิมทุกครั้ง

 <script type="text/javascript">
    var storedHash = window.location.hash;
    function changeHashOnLoad() { window.location.hash = "1";}
    window.onhashchange = function () {
        window.location.hash = storedHash;
    }
</script>

<body onload="changeHashOnLoad(); ">

</bod>


0

แทนที่จะพยายามปิดใช้งานปุ่มย้อนกลับของเบราว์เซอร์จะดีกว่าที่จะสนับสนุน .NET 3.5 สามารถจัดการกับปุ่มย้อนกลับ (และไปข้างหน้า) ของเบราว์เซอร์ได้เป็นอย่างดี ค้นหาด้วย Google: "Scriptmanager EnableHistory" คุณสามารถควบคุมได้ว่าการดำเนินการของผู้ใช้ใดจะเพิ่มรายการในประวัติของเบราว์เซอร์ (ScriptManager -> AddHistoryPoint) และแอปพลิเคชัน ASP.NET ของคุณได้รับเหตุการณ์เมื่อใดก็ตามที่ผู้ใช้คลิกปุ่มย้อนกลับ / ไปข้างหน้าของเบราว์เซอร์ สิ่งนี้จะใช้ได้กับเบราว์เซอร์ที่รู้จักทั้งหมด


0

ทั่วโลกการปิดใช้งานปุ่มย้อนกลับถือเป็นการปฏิบัติที่ไม่ดี แต่ในบางสถานการณ์การทำงานของปุ่มย้อนกลับไม่สมเหตุสมผล

วิธีหนึ่งในการป้องกันการนำทางที่ไม่ต้องการระหว่างเพจ:

หน้าบนสุด (ไฟล์top.php):

<?php
    session_start();
    $_SESSION[pid]++;
    echo "top page $_SESSION[pid]";
    echo "<BR><a href='secondary.php?pid=$_SESSION[pid]'>secondary page</a>";
?>

หน้ารอง (ไฟล์secondary.php):

<?php
    session_start();
    if ($_SESSION[pid] != $_GET[pid]) 
        header("location: top.php");
    else {
        echo "secondary page $_SESSION[pid]";
        echo "<BR><a href='top.php'>top</a>";
    }
?>

เอฟเฟกต์คืออนุญาตให้นำทางจากหน้าบนสุดไปข้างหน้าไปยังหน้ารองและย้อนกลับ (เช่นยกเลิก) โดยใช้ลิงก์ของคุณเอง แต่หลังจากกลับไปที่หน้าบนสุดแล้วปุ่มย้อนกลับของเบราว์เซอร์จะถูกป้องกันไม่ให้ไปที่หน้ารอง


0

แม้ว่าฉันจะเผชิญกับสถานการณ์เดียวกันมาก่อน ... และไม่ได้รับความช่วยเหลือใด ๆ ลองทำสิ่งเหล่านี้บางทีสิ่งเหล่านี้อาจได้ผลสำหรับคุณ

ใน<head>แท็กหน้าเข้าสู่ระบบ:

<script type="text/javascript">
    window.history.forward();
</script>

ในปุ่มออกจากระบบฉันทำสิ่งนี้:

protected void Btn_Logout_Click(object sender, EventArgs e)      
{
    connObj.Close();
    Session.Abandon();
    Session.RemoveAll();
    Session.Clear();
    HttpContext.Current.Session.Abandon();
}

และในหน้าเข้าสู่ระบบฉันได้ให้ความสำคัญกับกล่องข้อความชื่อผู้ใช้ดังนี้:

protected void Page_Load(object sender, EventArgs e)
{
    _txtUsername.Focus();
}

หวังว่านี่จะช่วยได้ ... :) มีคนสอนวิธีแก้ไขหน้านี้ ...


a) แก้ไขคำตอบของคุณ b) คลิกที่เครื่องหมายคำถาม c) คลิกที่ความช่วยเหลือขั้นสูง d) อ่านและนำไปใช้ :-) นอกจากนี้โปรดทราบว่า ctrl-k ยกเลิก / เยื้องบล็อกที่เลือกเพื่อยกเลิก / จัดรูปแบบเป็นรหัส นอกจากนี้ฟอร์แมตเตอร์ไม่สามารถจัดการแท็บได้ดี (อาจไม่ใช่ปัญหาที่นี่)
kleopatra

0

หากคุณจำเป็นต้องกดปุ่มลบและแบ็กสเปซในเว็บแอพของคุณเบา ๆ เพื่อที่ว่าเมื่อพวกเขากำลังแก้ไข / ลบรายการเพจจะไม่ถูกเปลี่ยนเส้นทางโดยไม่คาดคิดคุณสามารถใช้รหัสนี้:

window.addEventListener('keydown', function(e) {
  var key = e.keyCode || e.which;
  if (key == 8 /*BACKSPACE*/ || key == 46/*DELETE*/) {
    var len=window.location.href.length;
    if(window.location.href[len-1]!='#') window.location.href += "#";
  }
},false);

0

ลองใช้รหัสนี้ คุณต้องติดตั้งโค้ดนี้ในหน้าต้นแบบและจะใช้ได้กับคุณในทุกหน้า

<script type="text/javascript">
    window.onload = function () {
        noBack();
    }
    function noBack() {
        window.history.forward();
    }
</script>
<body  onpageshow="if (event.persisted) noBack();">
</body>

0

ปัญหาเกี่ยวกับรหัสของYossi Shashoคือหน้าจะเลื่อนไปด้านบนทุกๆ 50 ms ดังนั้นฉันได้แก้ไขรหัสนั้น ตอนนี้มันทำงานได้ดีบนเบราว์เซอร์สมัยใหม่ทั้งหมด IE8 ขึ้นไป

var storedHash = window.location.hash;
function changeHashOnLoad() {
    window.location.href += "#";
    setTimeout("changeHashAgain()", "50");
}

function changeHashAgain() {
    window.location.href += "1";
}

function restoreHash() {
    if (window.location.hash != storedHash) {
        window.location.hash = storedHash;
    }
}

if (window.addEventListener) {
    window.addEventListener("hashchange", function () {
        restoreHash();
    }, false);
}
else if (window.attachEvent) {
    window.attachEvent("onhashchange", function () {
        restoreHash();
    });
}
$(window).load(function () { changeHashOnLoad(); });

0

ดูเหมือนว่าจะได้ผลสำหรับเรา

history.pushState(null, null, $(location).attr('href'));
window.addEventListener('popstate', function () {
    history.pushState(null, null, $(location).attr('href'));
});

0
<script>
    $(document).ready(function() {
        function disableBack() { window.history.forward() }

        window.onload = disableBack();
        window.onpageshow = function(evt) { if (evt.persisted) disableBack() }
    });
</script>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.