ฉันเคยรู้สึกว่ามีหลายค่าใน Request.ServerVariables แต่ตอนนี้ฉันเห็นยังมีอีกมาก แต่วันนี้ ฉันจะพูดถึงค่าใดค่าหนึ่ง - HTTP_Referer และความแตกต่างระหว่าง Server_Name และ Http_Host ใน คำขอตัวแปรเซิร์ฟเวอร์?
ฉันเพิ่งรันโค้ดเพื่อดูว่ามีค่าใน Request.ServerVariables กี่ค่า ฉันดูแล้วพบว่ามีทั้งหมด 50 ค่า!
รหัส<%=Request.ServerVariables.count%>
เมื่อก่อนเคยรู้สึกว่า Request.ServerVariables มีค่ามากมาย แต่ตอนนี้เห็นว่ายังมีค่าอยู่มากมาย แต่วันนี้ ผมจะพูดถึงค่าค่าใดค่าหนึ่ง ---- HTTP_Referer
ก่อนอื่น เรารู้ก่อนว่าแอปพลิเคชัน HTTP_Referer ที่ใช้บ่อยที่สุดคือการป้องกันการส่งจากภายนอก
ในสถานการณ์ต่อไปนี้ Request.ServerVariables(HTTP_REFERER) จะได้รับตามปกติจากแถบที่อยู่ของเบราว์เซอร์:
1) ใช้ <a href=> โดยตรง
2) แบบฟอร์มที่ส่งพร้อมกับส่งหรือ <input type=image> (POST หรือ GET)
3) การส่งแบบฟอร์มโดยใช้ JavaScript (POST หรือ GET)
ลองมาดูสถานการณ์ที่ Request.ServerVariables(HTTP_REFERER) ไม่สามารถรับค่าได้ตามปกติ:
1) ลิงก์จากรายการโปรด
2) คลิกที่หน้าแรกหรือที่อยู่ที่กำหนดเอง
3) ป้อนที่อยู่ลงในเบราว์เซอร์โดยตรง
4) ใช้ Location.href หรือ Location.replace() ของ JavaScript
5) <%การตอบสนองการเปลี่ยนเส้นทาง%>
6) เปลี่ยนเส้นทาง <%Response.AddHeader%> หรือ <mete http-equiv=refresh>
7) โหลดที่อยู่โดยใช้ XML
เห็นได้ชัดว่า Request.ServerVariables(HTTP_REFERER) ทำงานไม่ถูกต้องในกรณีส่วนใหญ่ ฉันจะแนะนำการใช้งานเฉพาะโดยละเอียดในบทความต่อๆ ไป และยังแนะนำความแตกต่างระหว่าง Request.ServerVariables(HTTP_HOST)Request.ServerVariables(SERVER_NAME)
คอยติดตาม!
Server_Name และ Http_Host ใน Request.ServerVariables แตกต่างกันอย่างไร
หากคุณไม่มองอย่างใกล้ชิด คุณไม่น่าจะบอกความแตกต่างระหว่างสิ่งเหล่านั้นได้ ฉันค้นหาข้อมูลมากมายบนอินเทอร์เน็ต แต่ก็ยังไม่เข้าใจ แต่สุดท้ายก็มีประโยคที่ชัดเจนมาก: Http_Host สามารถขอ Server_Port อื่นที่ไม่ใช่ 80 พูดง่ายๆ ก็คือ Http_Host=Server_Name:Server_Port
ฉันเคยตีพิมพ์บทความเกี่ยวกับบทบาทของ Http_Referer มาก่อน และตอนนี้ฉันจะรวมบทความดังกล่าวเพื่อเขียนฟังก์ชัน ASP ที่ป้องกันการส่งข้อมูลจากภายนอก
คัดลอกโค้ดดังต่อไปนี้:ฟังก์ชัน ChkPost()
dim server_v1,server_v2
chkpost=false
server_v1=Cstr(Request.ServerVariables(HTTP_REFERER))
server_v2=Cstr(Request.ServerVariables(SERVER_NAME))
If Mid(server_v1,8,Len(server_v2) ) <>server_v2 แล้ว
chkpost=False
else
chkpost=True
end หาก
ฟังก์ชันสิ้นสุด
Select Case
หากคุณต้องการเลือกหนึ่งในหลายชุดของรหัสเพื่อดำเนินการ คุณสามารถใช้คำสั่ง SELECT:
คัดลอกรหัสดังนี้:
เลือกกรณี กรณีการชำระเงิน
Cash
msgbox คุณจะไปที่ จ่ายเงินสด
กรณี Visa
msgbox คุณจะชำระเงินด้วย
กรณีวีซ่า AmEx
msgbox คุณจะชำระเงินด้วย
กรณี American Express อื่น ๆ
msgbox ไม่ทราบวิธีการชำระเงิน
สิ้นสุด
วิธีการทำงานของโค้ดที่เลือก
ด้านบน: อันดับแรก เราต้องการนิพจน์ง่ายๆ (โดยปกติจะเป็นตัวแปร) และนิพจน์นี้จะได้รับการประเมินครั้งเดียว จากนั้น ค่าของนิพจน์จะถูกเปรียบเทียบกับค่าในแต่ละกรณี และหากมีการจับคู่กัน โค้ดที่สอดคล้องกับกรณีที่ตรงกันจะถูกดำเนินการ