มีเพื่อนๆหลายคนเขียน Web Application ด้วย ASP.NET
บางคนอาาจะสงสัยเกี่ยวกับการส่งค่าข้ามเพจ ถามว่ามีกี่วิธี และอย่างไรบ้าง

วันนี้ก็เลยจะมาอธิบายสักเล็กน้อย
วิธีการเก็บค่าไว้เพื่อใช้ในการประมวลผลเมื่อถูก request ในครั้งต่อไปนั้น
เรียกว่า State Management
เหตุที่ต้องมีตรงนี้ เพราะ web มีโครงสร้างที่ต่างจาก windows application ในเรื่องของการจำค่าตัวแปร
web application จะลืมค่าตัวแปรต่างๆ ที่ได้คำนวณไปแล้ว หลังจากส่ง response กลับไปที่ client
ดังนั้นเราจึงต้องทำให้มันจำได้นั่นเอง

State Management สำหรับฝั่ง Client ได้แก่
View state
Control state
Hidden fields
Cookies
Query strings

ส่วน State Management สำหรับฝั่ง Server ได้แก่
Application state
Session state
Profile properties
Database support

View state เหมาะกับเก็บข้อมูลขนาดไม่ใหญ่ (ถ้าใหญ่เพจจะโหลดนาน) เป็นการ encrypt ข้อมูลไปกับ html เลย ใช้งานง่ายไม่ซับซ้อน

Control state คล้ายๆ View state แต่จะต้องเขียน code มากกว่า ซับซ้อนกว่า แต่ข้อดีคือ ไม่สามารถที่จะ disable ได้ ในขณะ View state สามารถถูก disable ได้ ทำให้ control บางอย่างที่ใช้ View state เป็นกลไกหลักในการเก็บข้อมูลไม่สามารถใช้งานได้ถูกต้อง

Hidden fields ใช้งานง่ายมาก แต่จะมีปัญหาเรื่อง security เพราะข้อมูลเป็น plain text และปัญหาด้าน performance ในกรณีที่ข้อมูลขนาดใหญ่ ทำให้อาจถูก proxy หรือ firewall บล็อคได้

Cookies ใช้งานง่าย เก็บข้อมูลได้นาน ตราบเท่าที่เรากำหนดไว้ที่เครื่อง client และมันจะฝังอยู่ที่เครื่อง client จึงทำให้เกิดปัญหา security ได้ นอกจากนี้ยังมีปัญหาเรื่อง size limitation และ user-configured refusal อีก

Query strings เป็นวิธีที่ simple และ classic ที่สุด คือส่งค่าไปกับ url ซึ่งก็มีข้อดีคือความง่าย แต่ต้องแลกมาด้วย security นั่นแหละ รวมถึงความยาวด้วย เพราะ browser จำกัดความยาวของ url ไว้

Application state เป็นตัวแปรที่มี scope ในระดับ application แต่ว่าจะมี lifetime จำกัด (volatile state) นั่นคือหาก application มีการ restart ใหม่ ตัวแปรนี้จะหายไป และถูกสร้างขึ้นใหม่ด้วย

Session state ใช้งานง่าย ปลอดภัยสูง เก็บข้อมูลได้ทุกชนิด แต่ก็ทำให้ server รับภาระมากเหมือนกัน หากเขียนจัดการไม่ดี web จะถูกโจมตีได้ง่ายมาก

Profile properties ใช้งานคล้ายๆ Session แต่ว่าเก็บแบบถาวรกว่า คือไม่สูญหายไปไหน แม้ application จะถูก restart ก็ตาม แต่การจะใช้ profile ได้ ต้องมีการเซ็ตอัพระบบ user อีกมากมาย และก็ทำงานได้ช้ากว่า session

Database support ก็เป็นการใช้ DB ในการเก็บข้อมูลนั่นแหละ

ที่มา http://it17.forums-free.com/state-management-asp-net-t84.html