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

در این بخش با نحوه پیكربندی session در برنامه های وب آشنا خواهیم شد.

پیكربندی session در برنامه های وب
پیاده كنندگان برنامه های وب برای پیكربندی session state می توانند از فایل web.config ( موجود در دایركتوری مجازی شامل فایل های aspx . ) استفاده نمایند .  با استفاده از فایل فوق می توان گزینه های پیشرفته ای  نظیر  timeout و مد session state را پیكربندی كرد . در صورتی كه از ویژوال استودیو برای ایجاد یك برنامه وب استفاده شده باشد ، همزمان با ایجاد پروژه ، بطور اتوماتیك یك فایل web.config  نیز ایجاد می گردد . 
كد زیر یك نمونه فایل web.config را به همراه مهمترین خصلت های تاثیرگذار در پیكربندی session state را نشان می دهد .

 
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 
<system.web>
    ...
   <sessionState
   
cookieless="UseCookies" cookieName="ASP.NET_SessionId"
   
regenerateExpiredSessionId="false"
   
timeout="20"
   
mode="InProc"
   
stateConnectionString="tcpip=127.0.0.1:42424"
   
stateNetworkTimeout="10"
   
sqlConnectionString="data source=127.0.0.1;Integrated Security=SSPI"
   
sqlCommandTimeout="30"
   
allowCustomSqlDatabase="false"
   
customProvider=""
  />
</system.web>
</
configuration>

در ادامه به تشریح هر یك از  خصلت های فوق خواهیم پرداخت .

Cookieless
مقدار خصلت فوق بر اساس شرایط زیر تعیین می گردد .

  • UseCookies : گزینه پیش فرض است و همواره از كوكی استفاده خواهد شد حتی اگر مرورگر و یا دستگاه سرویس گیرنده از آن حمایت نكند و یا آن را غیرفعال كرده باشد . در صورتی كه دستگاه سرویس گیرنده از كوكی حمایت نكند ، اطلاعات session در بین درخواست های متوالی گم می شود . چراكه هر درخواست یك ID جدید را خواهد گرفت . 

  • UseUri : از كوكی صرفنظر از قابلیت های مرورگر و یا دستگاه سرویس گیرنده استفاده نخواهد شد . در چنین مواردی ، شناسه session در یك URL ذخیره می گردد .

  • UseDeviceProfile : معیار انتخاب ASP. NET جهت استفاده از cookieless session ، بررسی نتایج حاصل از بكارگیری شی BrowserCapabilities است . شی فوق صرفا" پتانسیل هائی را  كه دستگاه مورد نظر از آنها حمایت می نماید مشخص می كند ( خود را درگیر مواردی نظیر غیرفعال كردن كوكی توسط كاربر نمی كند )  .

  • AutoDetect : در این روش ، در آغاز ASP. NET سعی می كند تشخیص دهد كه آیا مرورگر از كوكی حمایت می نماید . بدین منظور یك كوكی بر روی كامپیوتر سرویس گیرنده ایجاد و در ادامه آن را بازیابی می نماید . ماحصل فرآیند فوق می تواند این موضوع را به اثبات رساند كه مرورگر از كوكی حمایت می نماید ولی توسط كاربر غیر فعال شده است ( در چنین مواردی از مد cookieless استفاده می گردد )

كد زیر بر استفاده از مد cookieless  تاكید می نماید ( مناسب برای تست ) .

<sessionState cookieless="UseUri" ...="" />

در مد cookieless ، شناسه session بطور اتوماتیك درون یك URL قرار می گیرد . زمانی كه ASP. NET یك درخواست را دریافت می نماید ، شناسه آن را حذف ، مجموعه session را بازیابی و درخواست دریافتی را برای دایركتوری مورد نظر ارسال می نماید .
با توجه به این كه شناسه session درون URL جاری قرار می گیرد ، لینك های مربوطه نیر بطور اتوماتیك قادر به استفاده از شناسه session  خواهند بود . به عبارت دیگر ، در صورتی كه كاربر بر روی page1.aspx باشد و بر روی لینك مربوط به page2.aspx كلیك نماید ، لینك مربوطه شامل شناسه session جاری به عنوان بخشی از URL مورد نظر خواهد بود .  سناریوی فوق در مواردی كه از متد Response.Redirect به همراه یك URL نسبی استفاده شده باشد نیز صدق می كند .

 Response.Redirect("Page2.aspx")

مثال  
در این مثال با نحوه  استفاده از  session  آشنا خواهیم شد . بدین منظور از دو صفحه با مد  cookieless استفاده شده است ( در فایل web.config  مقدار   cookieless معادل " UseUri" در نظر گرفته شده است ) . اولین صفحه (
Cookieless1.aspx ) شامل یك كنترل  Hyperlink و دو دكمه است . دومین صفحه ( Cookieless1.aspx) ، صفحه ای است كه كاربر پس از كلیك بر روی یكی از گزینه های موجود به آن هدایت شده و پس از بازیابی session ، اطلاعات در خروجی نمایش داده  می شود .
شكل 1 ، نحوه عملكرد صفحه
Cookieless1.aspx را نشان می دهد .

نحوه عملكرد session
شكل 1 ، نحوه عملكرد صفحه Cookieless1.aspx 

  • لینك به همراه مسیر نسبی : خصلت Hyperlink.NavigateUrl از طریق كد مقدار  Cookieless1.aspx را می گیرد. در صورت كلیك بر روی لینك فوق ،  شناسه session بازیابی و می توان از  اطلاعات session در صفحه جدید ( Cookieless2.aspx) استفاده كرد .

  • تغییر مسیر ( مسیر نسبی ) : تعییر مسیر از طریق كد  با مد cookieless  نیز كار می كند ( همانند بكارگیری یك مسیر نسبی ) . در مثال فوق از متد Response. Redirect برای هدایت كاربر به صفحه Cookieless2.aspx استفاده شده است .  در صورت كلیك بر روی دكمه فوق ،  شناسه session بازیابی و امكان استفاده از  اطلاعات session در صفحه جدید فراهم می گردد . كد زیر نحوه انجام این  كار را نشان می دهد .

Protected Sub cmdLink_Click(ByVal sender As Object,ByVal As EventArgs) Handles cmdLink.Click
  Response.Redirect(
"Cookieless2.aspx")
End Sub
  • تغییر مسیر ( مسیر مطلق ) : تنها محدودیت cookieless ، عدم امكان استفاده از لینك های absolute است . چراكه ASP. NET نمی تواند شناسه session را درون آنها قرار دهد . مثلا" در صورتی كه بر روی دكمه دوم كلیك شود ، امكان استفاده از session جاری در صفحه Cookieless2.aspx وجود نخواهد داشت . كد زیر نحوه انجام این كار را نشان می دهد .

 Protected Sub cmdLinkAbsolute_Click(ByVal sender As Object, ByVal e As EventArgs) Handles cmdLinkAbsolute.Click
  Dim url As String = "http://" & Request.Url.Authority & _
          Request.Url.Segments(0) & Request.Url.Segments(1)
 & "Cookieless2.aspx"
  Response.Redirect(url)
End Sub

كد صفحات   Cookieless1.aspx و  Cookieless2.aspx در جداول زیر نشان داده شده است .

صفحه Cookieless1.aspx

<%@ Page Language="VB" Culture="fa-IR" UICulture="fa-IR" %>

<script runat="server">

 Protected
Sub cmdLink_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdLink.Click
  Response.Redirect("Cookieless2.aspx")
 End
Sub

 Protected Sub cmdLinkAbsolute_Click(ByVal sender As Object,  ByVal e As System.EventArgs)  
  Dim url As String = "http://" & Request.Url.Authority & Request.Url.Segments(0) &_
              
             Request.Url.Segments(1) & "Cookieless2.aspx"
    Response.Redirect(url)
 End
Sub

 Protected
Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  Session("test") = "Test String"
 End Sub
</
script>

<
html xmlns="http://www.w3.org/1999/xhtml" dir="rtl" >
 <
head id="Head1" runat="server">
     <
title>تست session </title>
</
head>
<
body style="font-family: Tahoma">
 <
form id="form1" runat="server">
   <
div>
      <
strong> تست session     <br /> </strong>
     <
br />
    <
asp:HyperLink id="lnkRedirect" runat="server" Width="191px" Height="25px"
              NavigateUrl="Cookieless2.aspx">لینك به همراه مسیر نسبی</asp:HyperLink><br />
     <
br />
     <
asp:Button id="cmdLinkAbsolute" runat="server" Width="183px"
           Text
="تغییر مسیر(مسیر مطلق)" Font-Names="Tahoma" Font-Size="Small" ></asp:Button><br /><br />
     <
asp:Button id="cmdLink" runat="server" Width="187px"
           Text
="تغییر مسیر ( مسیر نسبی ) " Font-Names="Tahoma" Font-Size="Small" ></asp:Button>
  </
div>
 </
form>
</
body>
</
html
>

 

صفحه Cookieless2.aspx

<%@ Page Language="VB" Culture="fa-IR" UICulture="fa-IR" %>
 <script runat="server">
Protected
Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
 If Session("test") Is Nothing Then
    lblInfo.Text = "اطلاعات session موجود نمی باشد"
 
Else
    lblInfo.Text = "اطلاعات session با موفقیت بازیابی گردید " & CType(Session("test"), String)
 End If
End
Sub

</
script>
<
html xmlns="http://www.w3.org/1999/xhtml" dir="rtl" >
<
head id="Head1" runat="server">
    <
title>Untitled Page</title>
 </
head>
<
body style="font-family: Tahoma">
<
form id="form1" runat="server">
  <
div>
      <
asp:Label ID="lblInfo" runat="server" Font-Bold="True"
                       Font-Names
="Tahoma" Font-Size="Small"
                      
Height="52px" Style="z-index: 101; left: 488px; position: absolute; top: 25px"
                      
Width="353px" ForeColor="#C04000"></asp:Label>
  </
div>
 </
form>
 </
body>
</
html>

به صورت پیش فرض ، ASP. NET امكان استفاده مجدد از یك شناسه session را فراهم می نماید. مثلا" در صورتی كه درخواستی ایجاد و query string شامل یك session باشد كه مدت زمان اعتبار آن به پایان رسیده باشد ، ASP. NET یك session جدید را ایجاد و از شناسه session استفاده می نماید .
مشاهده ناخودآگاه یك شناسه session در یك مكان عمومی نظیر نتایج ارائه شده توسط یك موتور جستجو یكی از چالش های مهم روش فوق محسوب می گردد كه ممكن است زمینه دستیابی چندین كاربر به سرویس دهنده با استفاده از شناسه session مشابه را فراهم نماید .
برای پیشگیری از این تهدید امنیتی ، می بایست از خصلت regenerateExpiredSessionId با مقدارtrue استفاده شود  ( زمانی كه از session  با مد cookieless استفاده شده باشد ) . در چنین مواردی ، در صورتی كه یك كاربر با یك شناسه session كه تاریخ اعتبار آن به اتمام رسیده است به سرویس دهنده متصل شده باشد ، یك شناسه session جدید برای وی ایجاد خواهد شد .  تنها نكته قابل تامل در این روش ، از دست دادن مقادیر موجود در view sate و داده موجود در فرم  است ، چراكه ASP. NET برای حصول اطمینان از این موضوع كه مرورگر دارای یك شناسه جدید session است ، عملیات redirect را انجام خواهد داد . 
در بخش یازدهم به بررسی سایر خصلت های تاثیر گذار در پیكربندی session خواهیم پرداخت .





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


چهارشنبه 1 شهریور 1396 01:19 ب.ظ
I've read a few good stuff here. Certainly price bookmarking for revisiting.
I surprise how much effort you place to make this sort of magnificent informative website.
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر


درباره وبلاگ

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

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








جستجو

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