大家都知道酒酿蛋是非常传统的美胸食品产后丰胸产品,醪糟也叫酒酿,是由糯米或者大米经过酵母发酵而制成的一种风味食品,其产热量高,富含碳水化合物丰胸产品燕窝酒酿蛋、蛋白质、b族维生素、矿物质等,这些都是人体不可缺少的营养成分酒酿蛋丰胸方法。其中酒酿中含的醣化酵素,能促进乳房的二次发育,具有美胸的作用燕窝酒酿蛋丰胸
State Management در ASP. NET 2.0 (بخش ششم)
اين مطلب از طريق سايت شرکت سخاروش در اختيار شما گذاشته شده است .

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 ، عدم تحميل عمليات اضافه به سرويس دهنده است . علی رغم مزيت فوق ، رويكرد فوق دارای محدوديت های متعددی است كه به برخی از آنها اشاره می گردد :

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


استفاده از اين مطلب  با ذکر منبع و اهداف غيرانتفاعی بلامانع است .
http://www.srco.
ir