2012-10-08 50 views
9

मुझे क्लासिक एएसपी पेज के साथ कोई समस्या है और मैं इसे 3 दिनों से हल नहीं कर सकता।क्लासिक एएसपी: कुकीज़ में एकाधिक ASPSESSIONID

पृष्ठ सत्रों के साथ काम कर रहा है - कभी-कभी ऐसा होता है कि ASPSESSIONID कुकी अनुरोध ServerVariables ("HTTP_COOKIE") में दो बार सेट की जाती है। यह पृष्ठ को रीफ्रेश होने पर एएसपी-पेज को दो सत्रों के बीच कूदने का कारण बनता है।

मैंने एक टेस्ट पेज लिखा है जो वर्तमान सत्र आईडी, सर्वर सॉफ्टवेयर और HTTP_COOKIE मान आउटपुट करता है।

नमूना आउटपुट:


सत्र आईडी: 308542840

सत्र का समय समाप्त: 20 मिनट

सर्वर सॉफ्टवेयर: माइक्रोसॉफ्ट आईआईएस/6.0

HTTP_COOKIE: ASPSESSIONIDQCBATRAD = MBHHDGCBGGBJBMAEGLDAJLGF; ASPSESSIONIDQCCDTTCB = PGHPDGCBPLKALGGKIPOFIGDM


क्यों वहाँ दो ASPSESSIONIDs कर रहे हैं? जब मैं पृष्ठ को रीफ्रेश करता हूं तो यह यादृच्छिक रूप से दो सत्र आईडी में से एक आउटपुट करता है। http://prinz-alexander.at/asp_test.avi

यह त्रुटि अक्सर IE8 और IE9 में होता है:

यहाँ एक स्क्रीनकास्ट जो IE9 में समस्या से पता चलता है।

  1. पूरी तरह से करीब IE8 या IE9
  2. प्रारंभ IE8 या IE9 और खुले http://www.pfiffikus.at/pfiffikus/tests/
  3. immediatly के बाद पृष्ठ लोड होता है ताज़ा पेज एकाधिक बार
  4. :

    बस समस्या से बनाना निम्न कार्य करें

यदि आप इन चरणों को दोहराते हैं तो यादृच्छिक रूप से (हमेशा नहीं) HTTP_COOKIE दो अलग-अलग ASPSESSIONIDs के साथ पॉप्युलेट किया जाता है।

एएसपी परीक्षण फ़ाइल केवल mentiod मानों को आउटपुट कर रही है, स्रोत कोड में और कुछ भी नहीं हो रहा है।

यह वह जगह है एएसपी परीक्षण फ़ाइल का कोड:

<% If trim(Session("test_val")) = "" Then 
    Dim my_num 
    Randomize 
    number = Int((rnd*1000))+1 
    Session("test_val") = number 
    End If 
%> 

<b>Session ID:</b> 
<% response.write(Session.SessionId) %><br /><br /> 

<b>Session("test_val"):</b> 
<% response.write(Session("test_val")) %><br /><br /> 

<b>Session Timeout:</b> 
<% response.write(Session.Timeout) %> minutes<br /><br /> 

<b>Server Software:</b> 
<% response.write(Request.ServerVariables("SERVER_SOFTWARE")) %><br /> <br /> 

<b>HTTP_COOKIE:</b> <% response.write(Request.ServerVariables("HTTP_COOKIE")) %> 

मैं कुकीज़ में कई ASPSESSIONIds कैसे बच सकते हैं?

किसी भी मदद के लिए धन्यवाद!

+0

कुछ कोड पोस्ट करें जहां आपने अपना सत्र सौंपा है। – polin

+0

मैंने अपने प्रारंभिक प्रश्न में कोड जोड़ा है ... – swervedriver

+0

आपके पास एक वेब बाग (1 से अधिक प्रक्रिया वाला ऐप पूल) कॉन्फ़िगर किया गया है? – AnthonyWJones

उत्तर

-1

आपने उपयोगकर्ता के अपने सत्र में एक मूल्य असाइन किया है।

<% 
Session("test") = "test value" 
a=Session("test") 
response.Write(a) 
%> 
+0

ठीक है ... मैंने अभी अपना टेस्ट पेज संपादित किया है और आपने जो सुझाव दिया है उसे जोड़ा है (मैं सत्र में यादृच्छिक संख्या जोड़ रहा हूं, प्रारंभिक प्रश्न में संपादित कोड भी देख सकता हूं)। जब मैं आईई 9 में पेज का परीक्षण करता हूं तो मुझे अक्सर दो एएसपी सत्र आईडी मिलते हैं और जब मेरे पास कुकी में एएसपीएसशन आईडी होते हैं तो प्रत्येक पृष्ठ अनुरोध पर यह एक सत्र आईडी से दूसरी तरफ कूदता है (प्रत्येक सत्र में अपना "test_val" होता है) - "हास्यास्पद "इसके बारे में बात यह है कि मुझे कुकी में बिल्कुल दो एएसपीशन आईडी से अधिक नहीं मिलता है - यह कुछ है जो मैं उल्लेख करना भूल गया ... – swervedriver

+0

" प्रतिक्रिया.write सत्र। सत्र आईडी "जैसी प्रतिक्रिया नहीं है। प्रतिक्रिया.write (सत्र ("परीक्षण") की तरह प्रतिक्रिया।) एक और बात। हर बार जब आप पृष्ठ को रीफ्रेश करते हैं तो संख्या बदल जाती है। तो जब कोई उपयोगकर्ता लॉग इन करता है तो एक सत्र केवल तभी असाइन किया जाना चाहिए। – polin

+0

... मैंने शुरुआत में अगर कथन जोड़ा है, तो सत्र "test_val" केवल एक बार सेट हो जाता है। यदि मैं पृष्ठ को रीफ्रेश करता हूं, तो नंबर वही रहता है - क्या आपके मामले में प्रत्येक अनुरोध के बाद भी संख्या बदल रही है? – swervedriver

1

प्रत्येक उपयोगकर्ता यह समस्या भी एक लंबे समय के लिए मुझे परेशान करने के लिए अपने इस तरह अपने सत्र लाने लाने और विभिन्न अनन्य मानों आवंटित करने के लिए प्रयास करें। और मैं इसे हल नहीं कर सकता।

यह ब्राउज़र ब्राउज़र में से कोई नहीं है। मेरा क्रोम, फ़ायरफ़ॉक्स, आईई सभी को यह मुद्दा है।

कभी-कभी मैं एक पृष्ठ में 20+ ASPSESSIONIDXXXX कुकीज़ देख सकता हूं।

अंततः मुझे पुराने एएसपीएसएशन आईडी को साफ़ करने के लिए जावास्क्रिप्ट का उपयोग करना होगा और नवीनतम रखना होगा।

function clearASPSESSIONID(){ 
    var cks = document.cookie.match(/\b(ASPSESSIONID[A-Z]+)(?==)/g), 
     lskey = 'oldASPSESSIONID-'+location.protocol+'//'+location.host, 
     old = window.localStorage ? localStorage.getItem(lskey) : '', 
     keep, i; 
    for(i=0;i<cks.length;i++){ 
     if((old && old.indexOf(cks[i])<0) || i==cks.length-1){ 
      keep = cks[i]; 
     } 
    } 
    for(i=0;i<cks.length;i++){ 
     if(keep != cks[i]){ 
      document.cookie = cks[i] + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;'; 
     } 
    } 
    if(window.localStorage){ 
     localStorage.setItem(lskey, keep ? keep : ''); 
    } 
} 
clearASPSESSIONID(); 
+1

20+ ASPSESSIONIDxxxxxx (x की नोट संख्या) देखने का कारण यह हो सकता है कि 1) आपके पास एकाधिक सर्वरों का पूल है, प्रत्येक जो दूसरों के बारे में पता नहीं है 2) कुकी पूरे डोमेन के लिए सेट है, मेजबान के लिए नहीं। आप नाम को प्रतिबंधित करके इसे हल करने में सक्षम हो सकते हैं। देखें: http://stackoverflow.com/questions/7854288/aspsessionid-name-change एचटीएच – arielf

+0

कभी-कभी यह काम करता है, कभी-कभी ऐसा नहीं होता ... वास्तव में अजीब। –

4

मैं उन कुकीज़ को जावास्क्रिप्ट से हटाने में सक्षम था।

लॉगिन पृष्ठ के अंत में बस अगली स्क्रिप्ट जोड़ें।

<script type="text/javascript"> 
    //Clear any session cookies 
    (function(){ 
     var cookiesArr = document.cookie.split("; "); 
     for (var i = 0; i < cookiesArr.length; i++) { 
      var cItem = cookiesArr[i].split("="); 
      if (cItem.length > 0 && cItem[0].indexOf("ASPSESSIONID") == 0) { 
       deleteCookie(cItem[0]); 
      } 
     } 

     function deleteCookie(name) { 
      var expDate = new Date(); 
      expDate.setTime(expDate.getTime() - 86400000); //-1 day 
      var value = "; expires=" + expDate.toGMTString() + ";path=/"; 
      document.cookie = name + "=" + value; 
     } 
    })(); 
</script> 
+0

बेवकूफ के रूप में यह करना है, यह वही है जो मुझे कुकी आकार को सैकड़ों एस्प्रेसियड के साथ अधिकतम करने से बचने के लिए करना था! – frumbert

-1

global.asa फ़ाइल में:

Sub Session_OnStart 

    Dim cookie, cookies : cookies = Split(Request.ServerVariables("HTTP_COOKIE"),";") 
    For Each cookie In cookies 
     cookie = Trim(Split(cookie,"=")(0)) 
     If Left(cookie,12) = "ASPSESSIONID" Then 
      Response.AddHeader "Set-Cookie", cookie&"=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/" 
     End If 
    Next 

End Sub 
1

जाओ आवेदन पूल 'के लिए उन्नत सेटिंग "और सेट" अधिकतम कार्यकर्ता प्रक्रियाओं से पहले उपयोगकर्ता वेबसाइट पर लॉगिन जाएगा यह सब "ASPSESSIONIDXXXXXXX" कुकीज़ निकाल देंगे "करने के लिए 1.

+0

यह सिर्फ वेब बाग़ सेटिंग नहीं है, यह लोड बैलेंसर का भी उपयोग कर रहा है! प्रतिभाशाली। मैंने इसके बारे में सोचा नहीं था। – Brain2000

+0

यह समस्या का समाधान नहीं करता है ... अभी भी उनमें से कई बाकी हैं। –

0

शायद बाद में लेकिन चूंकि यहां स्वीकार किए जाते हैं जवाब है उपयोगी हो सकता है।

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

कई रीसाइक्लिंग स्थितियां हैं। मैंने गलती से "अनुरोधों की न्यूनतम संख्या" 1 सेट की है और प्रत्येक अनुरोध के लिए ASPSESSIONID