แนะนำ: โทรหา SQL Server Views และขั้นตอนที่เก็บไว้ใน ASP 1. คำนำหน้า ASP (หน้าเซิร์ฟเวอร์ที่ใช้งานอยู่) เป็นสภาพแวดล้อมการเขียนสคริปต์ฝั่งเซิร์ฟเวอร์ซึ่งรองรับโดย IIS3.0 ของ Microsoft หรือสูงกว่า สามารถใช้เพื่อสร้างหน้าเว็บแบบไดนามิกหรือสร้างเว็บแอปพลิเคชันที่มีประสิทธิภาพ หน้า ASP เป็นไฟล์ที่มีแท็ก HTML ข้อความข้อความและคำสั่งสคริปต์ หน้า ASP สามารถเรียกส่วนประกอบ ActiveX เพื่อทำงานเช่นการเชื่อมต่อกับตัวเลข
ทักษะเซสชันการเขียนโปรแกรม ASP วัตถุเซสชันนั้นใช้งานง่ายมาก สามารถใช้ในการบันทึกตัวแปรข้อมูลที่ผู้ใช้ซึ่งเป็นทั้งความปลอดภัยและสะดวก แต่คุณรู้หรือไม่ว่าเซสชั่นทำงานอย่างไร? บางทีหลังจากที่คุณเข้าใจคุณจะไม่กล้าที่จะใช้วัตถุที่เกลียดชังความรักนี้อีกครั้ง แม้ว่าวิธีการเปลี่ยนเป็นทางเลือกนั้นค่อนข้างลำบากหลังจากการพิจารณาระยะยาว แต่ฉันต้องทำเช่นนั้น
ก่อนอื่นให้พูดคุยเกี่ยวกับประโยชน์ของเซสชันซึ่งสามารถใช้ในการบันทึกตัวแปรข้อมูลที่ลูกค้าเป็นเจ้าของโดยเอกชนและจะไม่หายไปภายในช่วงเวลา นี่เป็นฟังก์ชั่นที่สำคัญจริงๆโดยเฉพาะอย่างยิ่งระบบที่ต้องใช้กับสมาชิก ตัวอย่างเช่นบัญชีล็อกอินของสมาชิกเวลาสถานะและข้อมูลเรียลไทม์จำนวนมากที่บันทึกไว้ในบันทึกนี้เช่นระบบการช็อปปิ้งบันทึกผลิตภัณฑ์ในตะกร้าการช็อปปิ้งของผู้ใช้ ข้อมูลนี้เป็นสิ่งจำเป็นแบบส่วนตัวโดยผู้ใช้แต่ละคนและนักพัฒนามักจะใช้บันทึกเซสชันเพื่อประมวลผล
อย่างไรก็ตามเซสชันใน ASP ประกอบด้วยคุกกี้และเซิร์ฟเวอร์ส่งข้อมูลทั้งหมดที่บันทึกไว้ในเซสชันไปยังเบราว์เซอร์ของผู้ใช้ในรูปแบบของคุกกี้ โดยปกติแล้วเบราว์เซอร์จะบันทึกคุกกี้เหล่านี้ เมื่อใดก็ตามที่ผู้ใช้คลิกที่ลิงค์และเชื่อมต่อกับเซิร์ฟเวอร์อีกครั้งเบราว์เซอร์จะส่งคุกกี้เหล่านี้กลับไปยังเซิร์ฟเวอร์เพื่อประมวลผล นี่คือหลักการปฏิบัติการของเซสชั่น เมื่อปริมาณข้อมูลมีขนาดใหญ่ขึ้นจะต้องส่งและรวบรวม ไม่เพียง แต่ใช้แบนด์วิดท์ของสายเท่านั้น แต่ยังลดประสิทธิภาพเนื่องจากเซิร์ฟเวอร์จะต้องใช้ทรัพยากรมากขึ้นในการดำเนินการเริ่มต้นเช่นการประมวลผลออนไลน์และการกำหนดค่าหน่วยความจำใหม่ ตอนนี้คุณอาจคิดว่า "ฉันต้องใช้ฟังก์ชั่นนี้ดังนั้นฉันต้องเสียสละเล็กน้อย" อย่างไรก็ตามบทความนี้พูดถึงเซสชั่น ในอีกด้านหนึ่งมันสอนให้คุณใช้น้อยลง ในทางกลับกันมีทางเลือกแน่นอน จากนั้นผู้ที่เข้ามาบนเวทีคือวัตถุแอปพลิเคชันที่เป็นของ global.asa
แอปพลิเคชันยังดีในการบันทึกและประมวลผลข้อมูลชั่วคราว ความสามารถและการใช้งานในทุกด้านนั้นเหมือนกับเซสชัน แต่ในการเปรียบเทียบข้อมูลที่บันทึกไว้คือสาธารณะนั่นคือพื้นที่ตัวแปรที่ผู้ใช้สามารถแบ่งปันได้ แอปพลิเคชันไม่เหมือนเซสชันซึ่งไม่ผ่านข้อมูลไปยังผู้ใช้และรอครั้งต่อไปเพื่ออ่านกลับออนไลน์ มันถูกบันทึกโดยตรงบนหน่วยความจำบนเซิร์ฟเวอร์และประสิทธิภาพนั้นเร็วกว่าเซสชันมาก
เนื่องจากวัตถุแอปพลิเคชันเป็นสาธารณะสิ่งแรกที่ต้องทำคือการวางแผนพื้นที่ส่วนกลางสำหรับผู้ใช้แต่ละคนเพื่อให้ผู้ใช้แต่ละคนมีพื้นที่ของตัวเองในการบันทึกข้อมูลเพื่อให้บรรลุวัตถุประสงค์ของเซสชันจำลอง มีสองวิธีในการทำตอนนี้:
1. เริ่มต้นและจัดสรรพื้นที่หน่วยความจำผู้ใช้ล่วงหน้าเมื่อเปิดใช้งานเซิร์ฟเวอร์ โดยปกติแม้ว่าวิธีการนี้จะใช้ทรัพยากรจำนวนมากทันทีที่เซิร์ฟเวอร์เปิดใช้งาน แต่ก็ยังช่วยประหยัดปัญหาในการจัดสรรทุกครั้งที่ผู้ใช้ออนไลน์ อย่างไรก็ตามมีข้อ จำกัด การใช้วิธีนี้จะต้อง จำกัด จำนวนคนสูงสุด เนื่องจากมีการเริ่มต้นทันทีที่เปิดใช้งานเราจึงสามารถประเมินการจัดตั้งพื้นที่หน่วยความจำจำนวนหนึ่งเท่านั้นดังนั้นวิธีนี้จึงมักใช้ในโปรแกรมขนาดเล็กเช่นห้องแชท
2. วิธีนี้ควรพิจารณาว่าเหมาะสมกว่าสำหรับแอปพลิเคชันขนาดใหญ่ มันใช้วิธีการจัดสรรแบบไดนามิก เฉพาะเมื่อผู้ใช้มาออนไลน์ไปยังเซิร์ฟเวอร์เป็นครั้งแรกทรัพยากรจะถูกจัดสรรให้กับผู้ใช้รายนี้ วัตถุประสงค์ของโซลูชันเซสชันจำลองทั้งสองนี้คือการลดการใช้ทรัพยากรเซสชัน แต่หลังจากทั้งหมดมันยังคงไม่สามารถถูกแทนที่ได้ เรายังคงต้องใช้เซสชันเล็ก ๆ น้อย ๆ ซึ่งอย่างน้อยสามารถลดภาระจำนวนมากบนเซิร์ฟเวอร์ได้
แผนแรก
ก่อนอื่นเราเริ่มการใช้งานโซลูชันแรก เนื่องจากเป็นการเริ่มต้นแอปพลิเคชันเมื่อเปิดใช้งานเราจึงต้องเริ่มต้นจาก global.asa:
การเริ่มต้นเสร็จสมบูรณ์แล้ว แต่จะใช้อย่างไร? เราเพียงแค่ต้องเปลี่ยนข้อมูลที่เก็บไว้ในเซสชันเช่นบัญชีและเวลาเข้าสู่ระบบลงในวัตถุแอปพลิเคชันที่เราสร้างขึ้นซึ่งผู้ใช้เข้าสู่ระบบ:
'กำลังมองหาพื้นที่ที่ไม่ได้ใช้
สำหรับ i = 1 ไปยังแอปพลิเคชัน (clientmax)
ถ้าแอปพลิเคชัน (user_status_ & i) = 0 แล้ว
'หมายเลขผู้ใช้ชั่วคราว
เซสชัน (ดัชนี) = i
'ล็อค
แอปพลิเคชันแอปพลิเคชันล็อค
'ตั้งค่าเป็นสถานะที่ใช้แล้ว
แอปพลิเคชัน (user_status_ & i) = 1 'ใส่ลงในข้อมูลตัวแปร
แอปพลิเคชัน (user_account_ & i) = บัญชี
แอปพลิเคชัน (user_logtime_ & i) = ตอนนี้ ()
'ปลดล็อค
application.unlock
ออกจาก
สิ้นสุดถ้า
ต่อไป
เพื่อให้ได้ข้อมูลตัวแปรที่เกี่ยวข้องของผู้ใช้มันเป็นเหมือนสิ่งต่อไปนี้:
Response.write (แอปพลิเคชัน (user_account_ & เซสชัน (ดัชนี))
คุณอาจพบว่าคุณไม่ได้หมายความว่าจะไม่ใช้เซสชัน? แล้วทำไมเซสชันจึงมีอยู่ในรหัสต้นฉบับด้านบน? ดังที่ได้กล่าวไว้ก่อนหน้านี้ทางเลือกนี้ไม่สามารถแทนที่เซสชันได้อย่างสมบูรณ์ เบราว์เซอร์ไม่ได้ออนไลน์กับเซิร์ฟเวอร์เสมอไป มันจะถูกตัดการเชื่อมต่อหลังจากอ่านหน้า แล้วเราจะรู้ได้อย่างไรว่าคนเดียวกันออนไลน์ในครั้งต่อไป? ในเวลานี้เราต้องพึ่งพาเซสชัน เราให้ชุดหมายเลขเรียลไทม์แก่ผู้ใช้ หมายเลขนี้คือจำนวนผู้ใช้ในพื้นที่ตัวแปรบนแอปพลิเคชัน คุณสามารถจินตนาการได้ว่ามีตู้นิรภัยมากมายในธนาคาร คุณมีคีย์และคีย์มีตัวเลข หมายเลขในคีย์ช่วยให้ผู้ให้บริการนำคุณไปสู่ความปลอดภัยของคุณเอง วิธีนี้มีการปรับปรุงบางอย่าง แต่ก็เพียงพอสำหรับแอปพลิเคชันขนาดเล็ก
แผนครั้งที่สอง
เกี่ยวกับโซลูชันก่อนหน้านี้คุณอาจคิดว่าหมายเลขที่กำหนดเองของเราใช้เซสชันเพื่อบันทึก เมื่อพูดถึงการกำหนดหมายเลขวัตถุเซสชันมีวิธี "SessionID" ถูกต้องไม่ว่าเราต้องการใช้หรือไม่เซิร์ฟเวอร์จะช่วยผู้ใช้แต่ละคนกำหนดหมายเลขโดยอัตโนมัติและหมายเลขนี้จะไม่ถูกทำซ้ำ สำหรับหมายเลขนี้จะได้รับจาก session.sessionid การกำหนดหมายเลขนี้เป็นการกระทำที่เซสชันจะทำอย่างแน่นอนดังนั้นเราสามารถใช้มันเพื่อแทนที่โปรแกรมการนับที่เราเขียนเองซึ่งช่วยประหยัดความพยายามอีกครั้งและยังมีการขยายตัวมากขึ้น แต่โดยพื้นฐานแล้วโซลูชันแรกข้างต้นยังคงมีประโยชน์เช่นห้องแชทที่ จำกัด จำนวนคนและแอปพลิเคชันขนาดเล็กอื่น ๆ ทางเลือกที่สองถัดไปสำหรับระบบขนาดใหญ่
หากเว็บไซต์ที่มีผู้คนหลายร้อยคนหลายพันคนหรือหลายหมื่นคนบนเว็บไซต์ทุกวินาทีมันจะไม่ทำงานอย่างแน่นอนหากใช้โซลูชันก่อนหน้า สมมติว่าคุณตั้งค่าขีด จำกัด สูงสุดของ 10,000 คนเมื่อเปิดใช้งานเซิร์ฟเวอร์แล้วมันจะช่วยให้คุณตัดพื้นที่ 10,000 แห่งเพื่อเตรียมความพร้อมสำหรับผู้ใช้ 10,000 คน หากมีตัวแปร 5 ตัวในภูมิภาคตัวแปรหนึ่งบัญชีสำหรับ 32 ไบต์ (ไบต์) และ 10,000 บัญชีสำหรับมากกว่า 320,000 K (320MB) และเมื่อเซิร์ฟเวอร์เปิดใช้งานแล้วมันจะมีขยะมากในหน่วยความจำและประสิทธิภาพของมันจะลดลงอย่างหลีกเลี่ยงไม่ได้ และแม้ว่าตัวเลขเหล่านี้จะมีน้อยมาก แต่ฉันคิดว่า 512 MB จะเพียงพอ แต่หมายเลขข้างต้นจะถือว่าเป็นหมายเลขขั้นต่ำและไม่ทราบว่าเซิร์ฟเวอร์จะใช้ทรัพยากรจำนวนเท่าใดเมื่อกำหนดค่าหน่วยความจำดังนั้นมันจะมากขึ้นและไม่ต่ำกว่า ดังนั้นวิธีแก้ปัญหาคือการกำหนดค่าพื้นที่ตัวแปรผู้ใช้แบบไดนามิกและตัดชิ้นส่วนของพื้นที่เมื่อผู้ใช้ออนไลน์กับเซิร์ฟเวอร์ดังนั้นจึงไม่จำเป็นต้องกำหนดค่าหน่วยความจำขนาดใหญ่ล่วงหน้า
ทางออกที่สองค่อนข้างง่ายที่จะทำ โปรดทิ้งทุกสิ่งในการแก้ปัญหาครั้งแรก เราไม่จำเป็นต้องย้ายไปที่ global.asa เราจำเป็นต้องเปลี่ยนการเข้าสู่ระบบของผู้ใช้และสถานที่ที่มีประโยชน์อื่น ๆ :
'ล็อค ApplicationApplication.lock' ใส่ข้อมูลตัวแปร
แอปพลิเคชัน (user_account_ & session.sessionId) = บัญชี
แอปพลิเคชัน (user_logtime_ & session.sessionId) = ตอนนี้ () 'ปลดล็อกแอปพลิเคชันปลดล็อค unlock
เพื่อให้ได้ข้อมูลตัวแปรที่เกี่ยวข้องของผู้ใช้มันเป็นเหมือนสิ่งต่อไปนี้:
Response.write (แอปพลิเคชัน (user_account_ & session.sessionId)))
ในอดีตฉันอ่านหนังสือหลายเล่มที่กล่าวว่าเซสชั่นเป็นเรื่องยากมากที่จะกินทรัพยากรดังนั้นพยายามอย่าใช้พวกเขา แต่ฉันยังต้องใช้พวกเขาเมื่อพวกเขาต้องทำและหนังสือไม่ได้สอนวิธีแก้ปัญหาที่เหมาะสมกว่านี้
ตอนนี้เมื่อคุณเข้าใจวิธีการแทนที่เซสชันทักษะเซสชันการเขียนโปรแกรม ASP ใช้มันให้ดี! บางทีปัญหาประสิทธิภาพที่มีปัญหาอยู่เสมอสามารถปรับปรุงได้มาก!
แบ่งปัน: บทนำง่ายๆเกี่ยวกับรูทีนย่อย ASP ใน ASP คุณสามารถเรียกรูทีนย่อยผ่าน VBScript และวิธีอื่น ๆ ตัวอย่าง: เรียกรูทีนย่อยโดยใช้ vbscript html head %sub vbproc (num1, num2) response.write (num1*num2) end sub % /body head p คุณสามารถเรียกโปรแกรมเช่นนี้: /ppresult: l vbproc (3,4) % /pp หรือเช่นนี้: / / / / / / / / / / / / / / / / / / / / / / / / / /