جستجو در محصولات

گالری پروژه های افتر افکت
گالری پروژه های PSD
جستجو در محصولات


تبلیغ بانک ها در صفحات
ربات ساز تلگرام در صفحات
ایمن نیوز در صفحات
.. سیستم ارسال پیامک ..
State Management در ASP. NET 2.0 (بخش ششم)
-(61 Body) 
State Management در ASP. NET 2.0 (بخش ششم)
Visitor 1424
Category: کامپيوتر

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 ) نشان مي دهد .

 نحوه عملكرد Query string
شكل 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 را رمز و يك سطح مطلوب امنيتي در ارتباط با آنها را ايجاد كرد ( اميدواريم در آينده و در مقالاتي جداگانه اين موضوع را بطور كامل تشريح نمائيم ) .
در بخش هفتم  به بررسي كوكي هاي سفارشي جهت ذخيره و بازيابي اطلاعات خواهيم پرداخت .

برگرفته از سايت سخا روش

Add Comments
Name:
Email:
User Comments:
SecurityCode: Captcha ImageChange Image