Web design and hosting, database, cloud and social media solutions that deliver business results
  • व्यापारिक समाधान
    • सॉफ़्टवेयर
    • रोबोटिक प्रक्रिया स्वचालन
    • डेटाबेस परामर्श सेवाएं
      • डेटा एकीकरण
      • डाटावेयरहाउस सेवाएं
      • पावर बीआई
      • सर्वर अपग्रेड और डीबीए सेवाएं
    • वेब साइट डिजाइन
      • भुगतान द्वार
      • लोगो डिजाइन
      • वेब स्थानीयकरण और अनुवाद
      • वेब साइट अनुकूलन
      • वेबसाइट सुरक्षा
      • तकनीकी उपकरण
    • क्लाउड समाधान
      • अमेज़न वेब सेवाएँ
      • Google क्लाउड सेवाएं
      • माइक्रोसॉफ्ट ऐज़ुर
    • माइक्रोसॉफ्ट ऑफिस
    • सामाजिक मीडिया
  • अकादमी
    • हमारा परीक्षण वातावरण
    • डेटाबेस डिजाइन सीखना
      • मूल बातें
      • SQL सर्वर Pivot-Unpivot का उपयोग करना
      • SQL सर्वर डेटा
      • SQL सर्वर फ़ंक्शंस का उपयोग करना
      • एसक्यूएल सर्वर 2008 रखरखाव योजनाएँ
      • एसक्यूएल सर्वर तिथियों का उपयोग करना
      • ओपन क्वेरी प्राप्त करें
    • वेबसाइट डिजाइन सीखना
      • Ousia सामग्री प्रबंधन प्रणाली का निर्माण
      • ASP-NET
      • CSS
      • जावास्क्रिप्ट का उपयोग करना
    • क्लाउड और आईटी सेवाएं सीखना
      • टास्क शेड्यूलर त्रुटि 2147943645
      • एसएसएल का अनुरोध करना और ओपनएसएसएल सरल चरणों में पीएफएक्स फ़ाइल बनाना
    • सामाजिक मीडिया का उपयोग
      • Google समीक्षा के लिए पूछना
      • फेसबुक अकाउंट को पर्सनल से बिजनेस में बदलना
      • सोशल मीडिया छवि आकार
      • सोशल मीडिया छवियाँ सेट करने के लिए मेटा डेटा का उपयोग करना
      • सोशल मीडिया प्रयासों पर ध्यान केंद्रित करने का स्थान चुनना
  • हमारे बारे में
    • ब्लॉग
      • Google कोर अपडेट जनवरी 2020
      • अपनी वेबसाइट के लिए सामग्री का चुनाव कैसे करें विज्ञापन पत्रक
      • इंटरनेट पर वेबसाइटों के बारे में सबसे कष्टप्रद बातें
      • एक प्रवेश स्तर की गेमिंग मशीन का निर्माण
      • ऑनलाइन घोटाले को रोकना
      • गिग इकॉनमी के स्किमर्स
      • मुफ्त वेक्टर ग्राफिक्स के लिए शीर्ष 5 वेबसाइटें
      • गर्म मिर्च इंटरनेट बंद
    • करियर
      • अनुवादक अंग्रेज़ी-जापानी
      • अनुवादक अंग्रेज़ी-तुर्की
      • अनुवादक अंग्रेज़ी-पुर्तगाली
      • अनुवादक अंग्रेज़ी-स्पेनिश
    • टीम
      • अली अल अमीन
      • ऐसे हुरो
      • एड्रियन आनंदन
      • गेविन क्लेटन
      • चेस्टर कॉपरपॉट
      • सुनील कुमार
      • सूर्य मुक्कमल
      • साई गंगू
    • नियामक
    • पोर्टफोलियो
English (EN-GB)English (EN-US)हिंदी (HI)italiano (IT)日本語 (JA)Português (PT)

सत्र राज्य को बदलना

ASP.NET एप्लिकेशन में सेशन स्टेट को बदलने पर एक नज़र

के बारे में

मैंने पिछले कुछ वर्षों में कस्टम सामग्री प्रबंधन प्रणालियों के साथ छेड़छाड़ करते हुए बिताया है, जिसकी परिणति औसिया के नवीनतम संस्करण में हुई है।

पिछले संस्करणों ने हमेशा ASP.NET सत्र स्थिति का उपयोग पोस्टबैक के बीच आइटम बनाए रखने के लिए, या एक अनुरोध होने पर जानकारी रखने के लिए किया था, एक कस्टम अनुरोध हैंडलर के संयोजन में जो विभिन्न पेज रूट डेटा आइटम को पॉप्युलेट करता है।

सत्र स्थिति डेटा संग्रहीत करने का एक आसान तरीका है, लेकिन मुझे बॉक्स के बाहर की कार्यक्षमता में कुछ कमियां मिलीं;

  • यदि कोई उपयोगकर्ता एक लंबा दस्तावेज़ संपादित कर रहा था, तो सत्र समाप्त हो सकता है इससे पहले कि वह आइटम को सहेजे
  • संपूर्ण एप्लिकेशन को चलाने वाली एकल IIS प्रक्रिया तक सीमित।

मैं ओसिया को एक मानक कार्यकर्ता प्रक्रिया से एक वेब गार्डन में स्थानांतरित करने के लिए देख रहा था, और मुझे पता था कि मुझे डेटा क्रॉस प्रक्रिया को याद रखने का कोई वैकल्पिक तरीका खोजना होगा। कुछ समाधान जिनका मैंने पहले ऑनलाइन उपयोग किया था या सामना किया था, उनमें विभिन्न पक्ष और विपक्ष शामिल थे;

Options

  • HttpContext
  • ViewState
  • Cookies
  • SessionState in SQL Server

के बारे में

तर्क ने मुझे (वैसे भी मेरा तर्क) तय किया कि मुझे डेटा के उद्देश्य को दो में विभाजित करना था।

क्या यह क्रॉस-पेज/क्रॉस-अनुरोध डेटा था, या कुछ ऐसा जिसे मुझे याद रखने की आवश्यकता थी, अनुरोध को संसाधित करने में लगने वाले समय के लिए?

अनुरोध प्रसंस्करण मूल्य - आसान जीत

मुझे बहुत जल्दी एहसास हुआ कि अनुरोध को संसाधित करने में लगने वाले समय के लिए डेटा को याद रखने के लिए सत्रस्टेट का उपयोग करने की कोई आवश्यकता नहीं है। इसे HttpContext द्वारा आसानी से नियंत्रित किया गया था।

मैं इसका उपयोग जटिल पोस्टबैक परिदृश्यों में अनुरोध श्रृंखला के नीचे स्क्रीन दृश्यता सेट करने के लिए कर सकता हूं, इन पंक्तियों के साथ कुछ। इस स्विच को बनाने के लिए, जिसकी मैं अनुशंसा करता हूं, तो आप नीचे दिए गए कोड के समान कुछ देख रहे हैं।

VB.NET

Session("YourVariable") = "Test"
Dim TestSession As String = Session("YourVariable").ToString
HttpContext.Current.Items("YourVariable") = "Test"
Dim TestContext As String = HttpContext.Current.Items("YourVariable").ToString

अनुरोध प्रसंस्करण मूल्य - आसान जीत

यह इतना आसान था, सचमुच कोड को सत्र से संदर्भ में बदल दें और आधी समस्याएं दूर हो गई थीं।

यह पोस्टबैक के बीच डेटा को याद रखने की प्रक्रिया को हल नहीं करता था, हालांकि, इसमें अधिक विचार होगा।


क्रॉस अनुरोध डेटा

मैंने डेटा क्रॉस रिक्वेस्ट को याद रखने के लिए कुकीज़ का उपयोग करने का फैसला किया, लेकिन सोचा कि मैं डेटा को स्टोर करने और एक्सेस करने के मामले में इसे अगले स्तर पर ले जाऊंगा, कार्यों और उप की एक श्रृंखला बनाकर जो इस डेटा तक पहुंचने के लिए कहीं और आसान बना देगा, क्रॉस उप डोमेन।

डोमेन फ़ंक्शन

डिफ़ॉल्ट रूप से, IIS में बनाई गई कुकी पूरे डोमेन स्तर पर होगी और केवल उस डोमेन तक ही पहुंच योग्य होगी। यह मेरे पास क्लेटाबेस और gsclayton.net दोनों साइटों पर मौजूद विभिन्न उप डोमेन के साथ मदद नहीं करेगा। सौभाग्य से आप कुकी डोमेन सेट कर सकते हैं।

मैंने पाया कि अन्य भागों के लेखन के दौरान मैं इस डोमेन कार्यक्षमता का पुन: उपयोग कर रहा था, इसलिए इसे एक अलग फ़ंक्शन में ले जाया गया। आंतरिक सर्वर पर कुकीज़ सेट करने के लिए यह आवश्यक था।

VB.NET

Public Shared Function UpdDomain(Domain As String) As String
    Dim DomainStr As String = ""
    If Domain.IndexOf(".") > -1 Then
        DomainStr = Domain
    Else
        DomainStr = ""
    End If
    Return DomainStr
End Function

कुकी समाप्ति

हां, कुकीज़ आपके द्वारा भेजी गई समाप्ति तिथि के साथ वापस नहीं आती हैं।

शीर्ष युक्ति - कुकी के भीतर समाप्ति को टिक के रूप में सहेजें।

VB.NET

Public Shared Function GetExpires(Cookie As HttpCookie) As Long
    Dim Expires As Long = 0
    If Not IsNothing(Cookie("Expires")) Then
        Try
            Expires = Cookie("Expires").ToString
        Catch
        End Try
    End If
    Return Expires
End Function

कुकी मान सेट करना

कुकी मान बनाने और सेट करने के लिए अब दो उप की आवश्यकता है। इन्हें काम करने के लिए पैरामीटर के रूप में अनुरोध और प्रतिक्रिया, कुकी नाम, डोमेन और मिनटों में टाइमआउट दोनों की आवश्यकता होती है।

मानों की सेटिंग उप के दूसरे भाग में होती है, और आप बस अतिरिक्त फ़ील्ड और मान को स्ट्रिंग्स के रूप में पास करते हैं।

VB.NET

Public Shared Sub PersistenceCreate(Request As HttpRequest, Response As HttpResponse, CookieName As String, Domain As String, TimeOut As Integer)
    If IsNothing(Request.Cookies(CookieName)) Then
        Dim PersistenceCookie As New HttpCookie(CookieName)
        Domain = UpdDomain(Domain)
        PersistenceCookie.Domain = Domain
        PersistenceCookie.Expires = DateAdd(DateInterval.Minute, TimeOut, Now.ToUniversalTime())
        PersistenceCookie("Expires") = PersistenceCookie.Expires.Ticks
        Response.Cookies.Add(PersistenceCookie)
    End If
End Sub
Public Shared Sub PersistenceSet(Request As HttpRequest, Response As HttpResponse, CookieName As String, Domain As String, TimeOut As Integer,
                                 Field As String, Value As String)
    If IsNothing(Request.Cookies(CookieName)) Then
        PersistenceCreate(Request, Response, CookieName, Domain, TimeOut)
    End If
    Dim PersistenceCookie As HttpCookie = Request.Cookies(CookieName)
    Dim Expires As Long = GetExpires(PersistenceCookie)
    Domain = UpdDomain(Domain)
    PersistenceCookie.Domain = Domain
    If Expires < DateAdd(DateInterval.Minute, TimeOut, Now.ToUniversalTime()).Ticks Then
        PersistenceCookie.Expires = DateAdd(DateInterval.Minute, TimeOut, Now.ToUniversalTime())
        PersistenceCookie("Expires") = PersistenceCookie.Expires.Ticks
    Else
        PersistenceCookie.Expires = New DateTime(Expires)
        PersistenceCookie("Expires") = PersistenceCookie.Expires.Ticks
    End If
    PersistenceCookie.Item(Field) = Value
    Response.Cookies.Add(PersistenceCookie)
End Sub

कुकी मान प्राप्त करना

ये एक ही चीज़ के दो अलग-अलग स्वाद हैं। पहला कुकी से एक मान लौटाता है यदि यह मौजूद है या एक खाली स्ट्रिंग है, तो दूसरा एक साधारण बूलियन है यदि कुकी मान इनपुट चर के बराबर है।

VB.NET

Public Shared Function PersistenceGet(Request As HttpRequest, CookieName As String, Field As String) As String
    Dim r As String = ""
    If Not IsNothing(Request.Cookies(CookieName)) Then
        If Not IsNothing(Request.Cookies(CookieName)(Field)) Then
            r = Request.Cookies(CookieName)(Field).ToString
        End If
    End If
    Return r
End Function
Public Shared Function PersistenceCheck(Request As HttpRequest, CookieName As String, Field As String, Value As String) As Boolean
    Dim r As Boolean = False
    If Not IsNothing(Request.Cookies(CookieName)) Then
        If Not IsNothing(Request.Cookies(CookieName)(Field)) Then
            If Request.Cookies(CookieName)(Field) = Value Then
                r = True
            End If
        End If
    End If
    Return r
End Function

कुकी पुनर्चक्रण

थोड़ी देर रूकें! अभी पिछले बिट्स के साथ भागो मत। यहां जादू पैदा होता है।

आप जल्दी से महसूस करेंगे कि कुकी की समय सीमा समाप्त हो जाएगी जब तक कि आप बार-बार किसी मान को रीसेट नहीं करते। अन्य बातों के अलावा हमारी दृढ़ता कुकी को याद रखने के लिए इसे हमारे अनुरोध हैंडलर में प्लग किया गया है। यदि कुकी 20 मिनट से कम हो जाती है तो यह बस कुकी की समाप्ति को रीसेट कर देता है।

Public Shared Sub PersistenceRecycle(Request As HttpRequest, Response As HttpResponse, CookieName As String, Domain As String)
    If Not IsNothing(HttpContext.Current.Request.Cookies(CookieName)) Then
        Dim PersistenceCookie As HttpCookie = HttpContext.Current.Request.Cookies(CookieName)
        Dim Expires As Long = GetExpires(PersistenceCookie)
        Domain = UpdDomain(Domain)
        If Expires < DateAdd(DateInterval.Minute, 20, Now.ToUniversalTime()).Ticks Then
            PersistenceCookie.Expires = DateAdd(DateInterval.Minute, 20, Now.ToUniversalTime())
            PersistenceCookie("Expires") = PersistenceCookie.Expires.Ticks
            PersistenceCookie.Domain = Domain
            Response.Cookies.Add(PersistenceCookie)
        End If
    End If
End Sub

पुनर्कथन और उपयोग

कार्यों का उपयोग करना आसान नहीं हो सकता। अगली बार उपयोगकर्ता के वापस आने पर ड्रॉपडाउन फ़ील्ड चयनित मान सेट करने का एक सरल उदाहरण हो सकता है। इस परिदृश्य में हम इसे निम्नानुसार उपयोग करेंगे।

परीक्षण करने के लिए, एक साधारण ड्रॉपडाउन के साथ एक नया वेब फ़ॉर्म बनाएं, परिवर्तन पर ऑटो पोस्टबैक पर सेट करें।

HMTL

<asp:dropdownlist runat="server" id="CookieDrop" AutoPostBack="true">
    <asp:ListItem Value="1">Value 1</asp:ListItem>
    <asp:ListItem Value="2">Value 2</asp:ListItem>
    <asp:ListItem Value="3">Value 3</asp:ListItem>
    <asp:ListItem Value="4">Value 4</asp:ListItem>
</asp:dropdownlist>

VB.NET

Imports CookieModule 'or whatever you called it
Public Class DropDownCookie
    Inherits System.Web.UI.Page
    Protected Sub CookieDrop_SelectedIndexChanged(sender As Object, e As EventArgs) Handles CookieDrop.SelectedIndexChanged
        'Set the cookie for one minute...
        PersistenceSet(Request, Response, "DropDownTest", "", 1, "SelectedValue", CookieDrop.SelectedValue)
    End Sub
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        GetData()
        PersistenceRecycle(Request, Response, "DropDownTest", "")
        If Not IsPostBack Then 'Delete if you want to remove ViewState!
            SetDropDownVal()
        End If
    End Sub
    Protected Sub Page_PreRender() Handles Me.PreRender
    End Sub
    Protected Sub GetData()
        'Bind Data to DropDown
    End Sub
    Protected Sub SetDropDownVal()
        Dim DropDownVal As Integer
        If PersistenceGet(Request, "DropDownTest", "SelectedValue") <> "" Then
            If IsNumeric(PersistenceGet(Request, "DropDownTest", "SelectedValue")) Then
                DropDownVal = PersistenceGet(Request, "DropDownTest", "SelectedValue")
                Try
                    CookieDrop.SelectedValue = DropDownVal
                Catch
                End Try
            End If
        End If
    End Sub
End Class

लेखक

Was this helpful?

Please note, this commenting system is still in final testing.

क्लेटाबेस द्वारा वेबसाइट डिजाइन

यह कोड का एक भाग है जिसे Ousia सामग्री प्रबंधन प्रणाली कोड से संशोधित किया गया है, जो बाजार पर सबसे तेज और सबसे अनुकूलित प्रणालियों में से एक है, जो हमारी वेबसाइट डिजाइन सेवाओं का हिस्सा है।

ये लगभग £500 से शुरू होने वाली साइटों के साथ उपलब्ध हैं।

अधिक: उत्तरदायी और तेज। सामग्री प्रबंधन प्रणाली के साथ वेब विकास, डिजाइन और होस्टिंग
Copyright Claytabase Ltd 2020

Registered in England and Wales 08985867

RSSLoginLink कूकी नीतिसाइटमैप

Social Media

facebook.com/Claytabaseinstagram.com/claytabase/twitter.com/Claytabaselinkedin.com/company/claytabase-ltd

Get in Touch

+442392064871info@claytabase.comClaytabase Ltd, Unit 3d, Rink Road Industrial Estate, PO33 2LT, United Kingdom
इस साइट की सेटिंग्स सभी कुकीज़ को अनुमति देने के लिए सेट हैं इन्हें हमारी कुकी नीति और सेटिंग पृष्ठ पर बदला जा सकता है। इस साइट का उपयोग जारी रखने के द्वारा आप कुकीज़ के उपयोग से सहमत हैं।
Ousia Logo
Logout
Ousia CMS Loader