|
عنوان
|
نويسنده
|
مشاهده
|
تعداد
آراء |
امتياز
|
|
State Management در ASP. NET 2.0 (بخش ششم) |
مديريت وب |
5835 |
8 |
4.1 |
State Management در ASP. NET 2.0
State Management در ASP. NET 2.0 (بخش
ششم)
آنچه تاكنون گفته شده است :
|
بخش اول |
مفاهيم اوليه
|
: |
ضرورت مديريت state در برنامه های وب |
|
بخش
دوم |
view state |
: |
نحوه ايمن سازی اطلاعات ذخيره شده در
view state
|
|
بخش سوم |
view state |
: |
نحوه نگهداری Member Variables و اشياء سفارشی |
|
بخش چهارم |
cross-page posting |
: |
انتقال اطلاعات از يك صفحه به صفحه ای ديگر |
|
بخش
پنجم |
cross-page posting |
: |
نحوه دريافت اطلاعات از صفحه مبداء |
در اين بخش با نحوه
انتقال اطلاعات بين صفحات با استفاده از روش Query String آشنا خواهيم شد .
Query String
يكی ديگر از روش های ارسال اطلاعات بين صفحات ، استفاده از يك
query string در URL است . از
رويكرد فوق در موتورهای جستجو استفاده می گردد . مثلا" در صورت استفاده از موتور
جستجوی گوگل ، پس از درج كليد واژه مورد نظر به يك URL
جديد كه با پارامترهای جستجو
تركيب می گردد ، هدايت می شويم.
|
http://www.google.com/search?q=web
application+ASP.NET |
query string ، به عنوان بخشی از URL محسوب می
گردد و پس از علامت سوال آورده می شود . در مثال فوق ، يك متغير با نام
q و مقدار web application +ASP. NET
تعريف می گردد .
يكی از مهمترين مزايای query string ، عدم تحميل عمليات
اضافه به سرويس دهنده است . علی رغم مزيت فوق ، رويكرد فوق دارای محدوديت های
متعددی است كه به برخی از آنها اشاره می گردد :
-
اطلاعات محدود به رشته
های ساده مشتمل بر كاراكترهای مجاز URL
است .
-
اطلاعات توسط كاربران
قابل مشاهده بوده و هر شخص علاقه مند
می تواند آنها را استراق سمع نمايد .
-
كاربران ماهر می توانند
محتويات query string را تغيير داده و وضعيتی را ايجاد
نمايند كه برنامه قادر به واكنش مناسب با آن
نباشد ( ايجاد شرايط
غيرقابل پيش بينی )
-
تعداد زيادی از
مرورگرها دارای محدوديت طول يك URL می باشند ( معمولا"
بين يك تا دو كيلو بايت ) . بنابراين ، نمی توان حجم بالائی از اطلاعات را در
query string ذخيره كرد و اين اطمينان را داشت كه اكثر
مرورگرها بتوانند از آن استفاده نمايند ( به
دليل عدم سازگاری ) .
علی رغم محدوديت های
اشاره شده ، query string همچنان به
عنوان مكانيزمی جهت ارسال داده از يك صفحه به صفحه ديگر
استفاده می گردد . روش فوق در
برنامه هائی با محوريت بانك های اطلاعاتی بيشتر
مورد توجه است . در چنين مواردی
در آغاز ليستی از آيتم هائی نمايش داده می شود كه متاثر از داده موجود در بانك
اطلاعاتی است ( نظير ليست محصولات ، ليست مقالات ، ليست خبرها و ... ) . پس از
انتخاب يكی از آيتم ها ، كاربر به صفحه ای ديگر هدايت می گردد تا اطلاعات بيشتری در
ارتباط با آيتم انتخابی در اختيار وی گذاشته شود .
برای ذخيره اطلاعات در query string ، می بايست پياده
كنندگان خود اطلاعات را در مكان مورد نظر قرار دهند . متاسفانه ، روشی مبتنی بر
collection برای انجام اين كار وجود ندارد . اين بدان
معنی است كه در چنين مواردی می بايست عموما" از يك كنترل
Hyperlink خاص و يا عبارت Response.Redirect استفاده
كرد .
كد زير كاربر را به صفحه newspage.aspx هدايت می نمايد .
همراه با كاربر متغيری با نام recordID و مقدار 10 نيز
برای صفحه فوق ارسال می گردد .
|
Response.Redirect("newpage.aspx?recordID=10") |
در صورت نياز می توان
چندين پارامتر را كه توسط علامت & ( ampersand ) از
يكديگر جدا می شوند ، به صفحه مقصد ارسال كرد .
كد زير كاربر را به صفحه newspage.aspx هدايت می نمايد .
همراه با كاربر متغيرهائی با نام recordID و مقدار
10 و mode با مقدار
full نيز برای صفحه فوق ارسال می گردد .
|
Response.Redirect("newpage.aspx?recordID=10&mode=full") |
صفحه دريافت كننده به
سادگی می تواند اطلاعات ارسالی را دريافت نمايد . بدين منظور از مجموعه ديكشنری
QueryString كه توسط شی Request ارائه شده است ، استفاده
می گردد .
|
Dim ID As String = Request.QueryString("recordID") |
توجه داشته باشيد كه
اطلاعات همواره به عنوان يك رشته بازيابی می گردند و در صورت نياز می بايست آنها را
به نوع داده مورد نظر تبديل كرد . مقادير ذخيره شده در مجموعه QueryString ،
با استفاده از اسامی متغيرها ، ايندكس می گردند .
query string بر خلاف view state
، اطلاعات را كاملا" شفاف ، آشكارا و غير رمز شده ارسال
می نمايد . بنابراين در
مواردی كه لازم است اطلاعاتی بطور مخفی از يك صفحه به صفحه ديگر ارسال و يا بر روی
آن حساسيت خاصی از نظر امنيتی وجود دارد ، استفاده از روش
query string توصيه نمی گردد .
مثال
در اين مثال هدف بررسی نحوه عملكرد و يا رفتار query
string با استفاده از دو صفحه است . در صفحه مبداء ليستی از آيتم ها
در اختيار كاربر گذاشته می شود . پس از انتخاب يكی از آيتم ها ، كاربر به يك صفحه
جديد ( مقصد ) هدايت می گردد . در صفحه مقصد آيتم انتخاب شده به همراه مقدار متغير
mode در خروجی نمايش داده می شود .
صفحه مبداء شامل ليستی از آيتم ها ، يك check box ، يك
كنترل label و دكمه "مشاهده
اطلاعات " است .
كد زير محتويات صفحه
مبداء ( QueryStringSender.aspx ) را نشان می دهد .
|
صفحه
QueryStringSender.aspx |
<%@
Page
Language="VB"
Culture="fa-IR"
UICulture="fa-IR"
%>
<script
runat="server">
Protected
Sub Page_Load(ByVal
sender As
Object,
ByVal e
As
EventArgs)
Handles
Me.Load
If
Not
Me.IsPostBack
Then
lstItems.Items.Add("مقالات
")
lstItems.Items.Add("نكته
ها")
lstItems.Items.Add("خودآزمون
ها")
lstItems.Items.Add("خود
آموزها")
lstItems.Items.Add("هيچكدام")
End
If
End
Sub
Protected
Sub cmdGo_Click(ByVal
sender As
Object,
ByVal e
As
EventArgs)
Handles cmdGo.Click
If
lstItems.SelectedIndex = -1
Then
lblError.Text =
" يكی از آيتم های موجود در ليست را انتخاب نمائيد"
Else
Dim
Url As
String =
"QueryStringRecipient.aspx?"
Url
&= "Item="
& lstItems.SelectedItem.Text &
"&"
Url
&= "Mode="
& chkDetails.Checked.ToString()
Response.Redirect(Url)
End
If
End
Sub
</script>
<html
xmlns="http://www.w3.org/1999/xhtml"
dir="rtl">
<head
runat="server">
<title>تست
query string | صفحه ارسال كننده</title>
</head>
<body>
<form
id="form1"
runat="server">
<div>
<span
style="font-size:
9pt; font-family: Tahoma">
<strong>
<span
style="color:
#006699">
علاقه مند به مشاهده كدام بخش
از سايت سخا روش می باشيد ؟
</span><br
/>
</strong>
</span><br
/>
<asp:ListBox
ID="lstItems"
runat="server"
Height="90px"
Width="165px"
Font-Names="Tahoma"></asp:ListBox><br
/>
<br
/>
<asp:CheckBox
ID="chkDetails"
runat="server"
Text="جزئيات
نمايش داده شود ؟"
TextAlign="Right"
Font-Names="Tahoma"
/><br
/>
<br
/>
<asp:Button
ID="cmdGo"
runat="server"
Text="مشاهده
اطلاعات"
Width="122px"
Font-Names="Tahoma"
/><br
/><br
/>
<asp:Label
ID="lblError"
runat="server"
EnableViewState="False"
Font-Names="Tahoma"
ForeColor="Red"></asp:Label>
</div>
</form>
</body>
</html> |
كد زير محتويات صفحه
مقصد (
QueryStringRecipient.aspx ) را نشان می دهد .
|
صفحه
QueryStringRecipient.aspx |
<%@
Page
Language="VB"
Culture="fa-IR"
UICulture="fa-IR"
%>
<script
runat="server">
Protected
Sub Page_Load(ByVal
sender As
Object,
ByVal e
As
EventArgs)
Handles MyBase.Load
lblInfo.Text =
"آيتم انتخاب شده توسط كاربر :
" & "<b>"
& Request.QueryString("Item")
& "</b>"
lblInfo.Text &=
"<br>نمايش تمامی اطلاعات : "
& "<b>"
lblInfo.Text &= Request.QueryString("Mode")
& "</b>"
End
Sub
</script>
<html
xmlns="http://www.w3.org/1999/xhtml"
dir="rtl">
<head
runat="server">
<title>تست
query string | صفحه دريافت كننده</title>
</head>
<body
style="font-family:
Tahoma;">
<form
id="form1"
runat="server">
<div
>
<asp:Label
ID="lblInfo"
runat="server"
EnableViewState="False"
Font-Names="Tahoma"
>
</asp:Label>
</div>
</form>
</body>
</html> |
شكل 1 ، نحوه عملكرد
Query string را در ارتباط با صفحه مبداء
(QueryStringSender.aspx) و مقصد (QueryStringRecipient.aspx ) نشان می دهد .

شكل 1 : نحوه عملكرد Query string
URL Encoding
يكی از مسائل در ارتباط با روش query string
، استفاده از كاراكترهای غيرمجاز در يك URL است . ليست
كاراكترهای مجاز در يك URL بمراتب كمتر از ليست
كاراكترهای مجاز در يك سند HTML
است . تمامی كاراكترها می بايست الفبا عددی و يا يكی از مجموعه كاراكترهای
خاص نظير $-_.+!*'() باشد . علاوه بر كاراكترهای فوق ، برخی
مرورگرها ممكن است دارای محدوديت های مختص به خود نيز باشند .
در صورتی كه لازم است مجاز بودن كاراكترهای ذخيره شده در query
string بررسی گردد ، می توان از URL encoding
استفاده كرد . با استفاده از ويژگی فوق ، كاراكترهای خاص
با دنباله ای از escaped
character جايگزين می گردند كه با علامت درصد (%) شروع و به دنبال آن
يك عدد دو رقمی مبنای شانزده آورده می شود ( مثلا" space
به 20 % تبديل می
گردد ) .
از متدهای كلاس HttpServerUtility می توان برای encode اتوماتيك
داده استفاده كرد .
كد زير نحوه encoding يك رشته حاوی داده
جهت استفاده در query string را نشان می دهد . بدين
ترتيب ، تمامی كاراكترهای غيرمجاز با دنباله ای از escaped character
جايگزين می گردند .
Dim productName As String = "Test
Product"
Response.Redirect("newpage.aspx?productName=" & Server.UrlEncode(productName)) |
از كد زير
برای decoding در صفحه مقصد استفاده می گردد
.
|
Dim ID As String =
Server.UrlDecode(Request.QueryString("recordID")) |
متاسفانه ، ASP.NET
دارای مكانيزم خاصی جهت بررسی و رمزنگاری اتوماتيك query
string نمی باشد . با استفاده از كلاس های متعدد رمزنگاری ارائه شده در دات
نت ، می توان رشته های query string
را رمز و يك سطح مطلوب امنيتی در ارتباط با آنها را ايجاد كرد ( اميدواريم در آينده
و در مقالاتی جداگانه اين موضوع را بطور كامل تشريح نمائيم ) .
در بخش هفتم به بررسی
كوكی های سفارشی جهت ذخيره و بازيابی اطلاعات خواهيم پرداخت .