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

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


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

State Management در ASP. NET 2.0 (بخش دهم)
آنچه تاكنون گفته شده است :

 بخش اول

 مفاهيم اوليه

:

 ضرورت مديريت state در برنامه هاي وب

 بخش دوم  

 view state   

:  نحوه ايمن سازي اطلاعات ذخيره شده در view state
 بخش سوم  

view state

: نحوه نگهداري Member Variables و اشياء سفارشي
 بخش چهارم

cross-page posting

: انتقال اطلاعات از يك صفحه به صفحه اي ديگر
 بخش پنجم

cross-page posting

: نحوه دريافت اطلاعات  از صفحه مبداء
 بخش ششم

Query String

:  نحوه انتقال اطلاعات بين صفحات
 بخش هفتم  كوكي هاي سفارشي : نحوه عملكرد كوكي هاي سفارشي
 بخش هشتم 

Session State

: مفاهيم و معماري session  
 بخش نهم

Session State

: نحوه استفاده از session state

در اين بخش با نحوه پيكربندي 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 خواهيم پرداخت .

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

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