تبلیغات
آموزشASP.NET - State Management در ASP. NET 2.0 (بخش ششم)
 
فردا روشن اسن به
آموزشASP.NET
صفحه نخست         تماس با مدیر         پست الکترونیک        RSS         ATOM
 
 
سه شنبه 24 اسفند 1389 :: نویسنده : ارش کاکاوند

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





نوع مطلب :
برچسب ها :
لینک های مرتبط :


شنبه 18 شهریور 1396 03:24 ق.ظ
You've made some good points there. I checked on the internet to learn more about
the issue and found most people will go along
with your views on this website.
سه شنبه 14 شهریور 1396 11:50 ق.ظ
Good day! I just wish to offer you a big thumbs up for your great information you have here on this post.
I am coming back to your website for more soon.
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر


درباره وبلاگ

سلام من آرش کاکاوند دانشجوی رشته کامپیوتر هستم و ورود شما رابه دنیای aspخوش امدمیگم.حتما نظر بدین تا من کارم رو بهتر ادامه بدم

مدیر وبلاگ : ارش کاکاوند
مطالب اخیر
نویسندگان
صفحات جانبی
نظرسنجی
شما کدام یک از برنامه های زیر را برای طراحی وب انتخاب می کنید؟








جستجو

آمار وبلاگ
کل بازدید :
بازدید امروز :
بازدید دیروز :
بازدید این ماه :
بازدید ماه قبل :
تعداد نویسندگان :
تعداد کل پست ها :
آخرین بازدید :
آخرین بروز رسانی :