中国最大的เว็บ开发资源网站及技术社区,
การใช้งาน ASP
เซสชัน ASP ดั้งเดิมสามารถจัดเก็บข้อมูลเซสชันในหน่วยความจำเท่านั้น ในการจัดเก็บข้อมูลเซสชันไปยัง SQL Server วัตถุMicrosoft® Visual Basic® 6.0 COM ที่กำหนดเองถูกเขียนขึ้นเพื่อจัดการสถานะเซสชันแทนการใช้วัตถุเซสชันดั้งเดิม วัตถุ COM นี้จะถูกสร้างอินสแตนซ์ในช่วงเริ่มต้นของการร้องขอเว็บแต่ละครั้งและโหลดข้อมูลเซสชันใหม่จาก SQL Server เมื่อสคริปต์ ASP เสร็จสิ้นวัตถุนี้จะถูกยกเลิกและสถานะเซสชันจะคงอยู่กลับไปที่ SQL Server
วัตถุประสงค์หลักของวัตถุเซสชัน Visual Basic 6 COM คือการให้การเข้าถึงวัตถุที่แท้จริงของ Microsoft Internet Internet Server วัตถุเซสชัน Visual Basic 6.0 COM ใช้ MySession Class ของ SessionUtility Assembly เพื่อเก็บสถานะเซสชันและคลาส SessionPersistence ของ SessionUtility เพื่อโหลดและบันทึกข้อมูลเซสชันด้วย SQL Server คลาส MySession และ SessionPersistence จะถูกเปิดเผยเป็นวัตถุ COM โดยใช้ยูทิลิตี้ regasm.exe ยูทิลิตี้ regasm.exe สามารถลงทะเบียนและสร้างไลบรารีประเภทสำหรับไคลเอนต์ COM เพื่อใช้คลาสเฟรมเวิร์ก
ข้อมูลสถานะเซสชันจะถูกโหลดซ้ำในระหว่างการก่อสร้างวัตถุ ตัวสร้าง (class_initialize) จะเรียกคืนคุกกี้เซสชัน, การหมดเวลาเซสชัน (SessionTimeOut) และสตริงการเชื่อมต่อฐานข้อมูล (SessionDSN) จากวัตถุแอปพลิเคชันและสร้างอินสแตนซ์ของคลาส MySession เพื่อเก็บข้อมูลเซสชัน จากนั้นตัวสร้างจะพยายามโหลดข้อมูลเซสชันจาก SQL Server ด้วยคุกกี้ที่กำหนด หากเซิร์ฟเวอร์ SQL ไม่มีข้อมูลเซสชันหรือเซสชันหมดอายุจะมีการออกคุกกี้ใหม่ หาก SQL Sever กลับมาพร้อมกับข้อมูลสถานะเซสชันสถานะเซสชันจะถูกเก็บไว้ในวัตถุ MySession
คลาสย่อย class_initialize ()
ในข้อผิดพลาด goto errhandler:
const method_name เป็น string = class_initialize
ตั้งค่า mysessionPersistence = new SessionPersistence
ตั้งค่า myObjectContext = getObjectContext ()
mysessionId = readsessionId ()
mydsnstring = getConnectiondSn ()
mytimeout = getSessiontimeout ()
myisNewsession = false
โทรเริ่มต้น
ออกจากย่อย
errhandler:
err.raise err.number, method_name &: & err.source, err.description
สิ้นสุดย่อย
เริ่มต้นย่อยส่วนตัว ()
ในข้อผิดพลาด goto errhandler:
const method_name เป็น string = initContents
ถ้า mysessionid = แล้ว
Set MyContentSentity = ใหม่ mysession
MySessionId = MySessionPersistence.generateKey
myisNewsession = true
อื่น
ตั้งค่า myContentSentity =
MySessionPersistence.LoadSession (MySessionId, MydSnstring, MyTimeOut)
สิ้นสุดถ้า
ออกจากย่อย
errhandler:
err.raise err.number, method_name &: & err.source, err.description
สิ้นสุดย่อย
เมื่ออินสแตนซ์ของวัตถุออกไปจากขอบเขตในสคริปต์ Destructor (class_terminate) จะดำเนินการ Destructor จะคงข้อมูลเซสชันโดยใช้วิธีการ SessionPersistence.Savesession () หากนี่เป็นเซสชั่นใหม่ Destructor จะส่งคุกกี้ใหม่กลับไปที่เบราว์เซอร์
คลาสย่อย class_terminate ()
ในข้อผิดพลาด goto errhandler:
const method_name เป็น string = class_terminate
โทร setDataForSessionId
ออกจากย่อย
errhandler:
err.raise err.number, method_name &: & err.source, err.description
สิ้นสุดย่อย
SETDATAFORSESSIONID ส่วนตัว ()
ในข้อผิดพลาด goto errhandler:
const method_name เป็น string = setDataForSessionId
เรียก mysessionpersistence.savesession (mysessionid,
mydsnstring, mycontentsentity, myisnewsession)
ถ้า myisnewsession โทรหา writesessionid (mysessionid)
ตั้งค่า myContentSentity = ไม่มีอะไร
ตั้งค่า myObjectContext = ไม่มีอะไร
ตั้งค่า mysessionPersistence = ไม่มีอะไร
ออกจากย่อย
errhandler:
err.raise err.number, method_name &: & err.source, err.description
สิ้นสุดย่อย
คุณสามารถดาวน์โหลดซอร์สโค้ดของโครงการ SessionUtility ASP.NET, COM Session Manager และรหัสตัวอย่างโดยคลิกที่ลิงค์ที่ด้านบนของบทความ
โปรแกรมสาธิต
โปรแกรมสาธิตได้รับการออกแบบมาเพื่อเพิ่มและแสดงตัวเลข ไม่ว่าจะมีการโหลดหน้าใดหมายเลขจะเพิ่มขึ้นเรื่อย ๆ เนื่องจากค่าตัวเลขจะถูกเก็บไว้ใน SQL Server และแชร์ระหว่างคลาสสิก ASP และ ASP.NET
ขั้นตอนในการตั้งค่าโปรแกรมสาธิต
สร้างฐานข้อมูลใหม่ที่เรียกว่า SessionDemodb
สร้างตาราง SESSSTATE (OSQL.EXE –E - D SessionDemodB –I session.sql)
สร้างไดเรกทอรีเสมือนใหม่ที่เรียกว่า Demo
ปิดเซสชัน ASP ภายใต้แท็บการกำหนดค่า ASP
คัดลอก web.config, testpage.aspx, global.asa, testpage.asp และ globalinclude.asp ไปยังไดเรกทอรีเสมือนจริง
อัปเดตการตั้งค่าสตริง DSN ใน global.asa และ web.config การตั้งค่าการหมดเวลาเซสชันเป็นทางเลือก ค่าเริ่มต้นคือ 20 นาที
ติดตั้ง SessionUtility.dll ลงในแคชแอสเซมบลีทั่วโลก (gacutil /i sessionUtility.dll)
เปิดเผย sessionUtility.dll เป็นวัตถุ COM โดยใช้ regasm.exe (regasm.exe sessionUtility.dll /tlb:sessionutility.tlb)
คัดลอก SessionManager.dll ไปยังไดเรกทอรีท้องถิ่นและใช้ regsvr32.exe เพื่อลงทะเบียน (regsvr32 sessionmanager.dll)
ให้บัญชี IUSR_ <Machine_Name> เพื่ออ่านและดำเนินการเข้าถึง SessionMgr.dll
ขั้นตอนในการเรียกใช้โปรแกรมสาธิต
เริ่มMicrosoft® Internet Explorer
โหลด TestPage.asp สำหรับ ASP แบบคลาสสิก หมายเลข 1 ควรปรากฏในหน้าเว็บ
คลิกรีเฟรชบน Internet Explorer เพื่อโหลดหน้าใหม่ จำนวนควรเพิ่มขึ้น
เปลี่ยน URL เป็น testpage.aspx สำหรับ asp.net จำนวนควรเพิ่มขึ้นเรื่อย ๆ
กระบวนการเดียวกันสามารถทำซ้ำได้โดยเริ่มต้นหน้า testpage.aspx ก่อน
การรวมวัตถุ COM ในแอปพลิเคชัน ASP ที่มีอยู่
การปฏิบัติทั่วไปในการพัฒนาแอปพลิเคชัน ASP คือการรวมไฟล์ในช่วงเริ่มต้นของแต่ละสคริปต์เพื่อแบ่งปันรหัสทั่วไปและค่าคงที่ วิธีที่ดีที่สุดในการรวมวัตถุเซสชันที่กำหนดเองคือการเพิ่มรหัสอินสแตนซ์ในไฟล์รวมทั่วไป ขั้นตอนสุดท้ายคือการแทนที่การอ้างอิงทั้งหมดไปยังวัตถุเซสชันด้วยชื่อตัวแปรเซสชันที่กำหนดเอง
ข้อ จำกัด/การปรับปรุง
โซลูชันนี้จะไม่รองรับแอปพลิเคชัน ASP ที่มีอยู่ซึ่งเก็บวัตถุ COM ในวัตถุเซสชัน ในกรณีนี้จำเป็นต้องใช้ Marshaler ที่กำหนดเองเพื่อทำให้เป็นอนุกรม/deserialize รัฐเพื่อใช้วัตถุเซสชันที่กำหนดเอง นอกจากนี้โซลูชันนี้ไม่รองรับการจัดเก็บอาร์เรย์ประเภทของสตริง ด้วยความพยายามเพิ่มเติมคุณลักษณะนี้สามารถนำไปใช้งานได้โดยใช้ฟังก์ชั่นการเข้าร่วม Microsoft Visual Basic® 6.0 เพื่อรวมองค์ประกอบอาร์เรย์ทั้งหมดลงในสตริงเดียวก่อนที่จะจัดเก็บลงในวัตถุเซสชัน สิ่งที่ตรงกันข้ามสามารถทำได้โดยใช้ฟังก์ชั่นการแยก Visual Basic 6.0 เพื่อแยกสตริงกลับไปที่องค์ประกอบอาร์เรย์แต่ละตัว ในด้าน. NET Framework วิธีการเข้าร่วมและการแยกเป็นสมาชิกของคลาสสตริง
บทสรุป
ASP.NET แสดงถึงกระบวนทัศน์และสถาปัตยกรรมการเขียนโปรแกรมใหม่และมีข้อได้เปรียบมากมายมากกว่า ASP แบบคลาสสิก แม้ว่าการพอร์ตจาก ASP ไปยัง ASP.NET ไม่ใช่กระบวนการที่ง่าย แต่รูปแบบการเขียนโปรแกรมที่ดีขึ้นและประสิทธิภาพที่ดีขึ้นของ ASP.NET จะทำให้กระบวนการแปลงคุ้มค่า ด้วยข้อยกเว้นของการจัดเก็บวัตถุ COM ในวัตถุเซสชันวิธีการที่อธิบายไว้ในบทความนี้เสนอวิธีแก้ปัญหาที่จะทำให้กระบวนการโยกย้ายง่ายขึ้น
เกี่ยวกับผู้แต่ง
Billy Yuen ทำงานทางตอนเหนือของแคลิฟอร์เนียที่ Microsoft Technology Center Silicon Valley ศูนย์นี้มุ่งเน้นไปที่การพัฒนาของ Microsoft .NET Framework Solutions เขาสามารถติดต่อได้ที่ [Email Protected]