( تعداد نمایش : 1343 )

نحوه انتقال اطلاعات بین صفحات Query String ASP .NET

در این بخش با نحوه انتقال اطلاعات بین صفحات با استفاده از روش 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 و مقدار ۱۰ نیز برای صفحه فوق ارسال می گردد .

Response.Redirect(“newpage.aspx?recordID=10″)

در صورت نیاز می توان چندین پارامتر را که توسط علامت & ( ampersand ) از یکدیگر جدا می شوند ، به صفحه مقصد ارسال کرد .
کد زیر کاربر را به صفحه newspage.aspx هدایت می نماید . همراه با کاربر متغیرهائی با نام  recordID و مقدار ۱۰  و  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>

شکل ۱ ، نحوه عملکرد Query string  را در ارتباط با صفحه مبداء (QueryStringSender.aspx) و مقصد (QueryStringRecipient.aspx ) نشان می دهد .

StateManagement5 نحوه انتقال اطلاعات بين صفحات Query String ASP .NET
شکل ۱ : نحوه عملکرد Query string

URL Encoding
یکی از مسائل در ارتباط با روش query string ، استفاده از کاراکترهای غیرمجاز در یک URL است . لیست کاراکترهای مجاز در یک URL بمراتب کمتر از لیست کاراکترهای مجاز در یک سند HTML است . تمامی کاراکترها می بایست الفبا عددی  و یا یکی از مجموعه کاراکترهای خاص نظیر  $-_.+!*’()  باشد .  علاوه بر کاراکترهای فوق ، برخی مرورگرها ممکن است دارای محدودیت های مختص به خود نیز باشند .
در صورتی که لازم است مجاز بودن کاراکترهای ذخیره شده در query string بررسی گردد ، می توان از URL encoding استفاده کرد . با استفاده از ویژگی فوق ، کاراکترهای خاص با دنباله ای از  escaped character  جایگزین می گردند که با علامت درصد (%) شروع و به دنبال آن یک عدد دو رقمی مبنای شانزده آورده می شود ( مثلا” space به  ۲۰ % تبدیل می گردد ) .
از متدهای کلاس  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 را رمز و یک سطح مطلوب امنیتی در ارتباط با آنها را ایجاد کرد ( امیدواریم در آینده و در مقالاتی جداگانه این موضوع را بطور کامل تشریح نمائیم ) .
در بخش هفتم  به بررسی کوکی های سفارشی جهت ذخیره و بازیابی اطلاعات خواهیم پرداخت .

دیدگاه خود را بیان کنید.

باید وارد سایت شده باشید برای دیدگاه دادن