2012-02-09 12 views
5

मैं एक एएसपीनेट साइट विकसित कर रहा हूं (.NET 4, EF, jQuery Ajax, SQL Server 2008 R2 का उपयोग कर रहा हूं)। इस साइट में मैं multi-login को रोकना चाहता हूं। मेरा मतलब है कि यदि आप साइट पर लॉग इन करते हैं, तो आप पहले से लॉग इन होने के बाद से अन्य ब्राउज़र या कंप्यूटर से साइट पर लॉग इन नहीं कर सकते हैं।उपयोगकर्ताओं को मेरी साइट पर एक से अधिक सत्रों में लॉगिन करने से कैसे रोकें?

मेरे पास एक सुझाव संयंत्र और अपनी साइट पर इसे विकसित किया है, लेकिन यह एक समस्या है और ऐसा इसलिए है क्योंकि कि समस्या यह है कि मैं एक सवाल यहाँ

मैं इस तरह एक एसक्यूएल सर्वर तालिका है पूछने के लिए तय:

Id  [int]   NOT NULL IDENTITY(1,1) //PK 
UserId [int]   NOT NULL     //Relation to User table 
Key  [nvarchar](50) NOT NULL     //Unique 

किसी उपयोगकर्ता के लॉग साइट में, मैं इस तरह इस तालिका में एक पंक्ति सम्मिलित करें:

UserId = The Id of logged in user 
Key = Session.SessionId 

है और यह भी इस तालिका क पर अमल से एक रिकॉर्ड को हटाने के लिए एक कोड है एन:

समस्या:: जब उपयोगकर्ता बंद कर देता है ब्राउज़र

  1. उपयोगकर्ता में global.asax

सब कुछ Session_End घटना पर अपना खाता

  • से लॉग आउट करने की कोशिश सही और, बस एकदम सही काम करता है , वह पंक्ति हटाई नहीं जाती है (मैंने सोचा था कि जब वह ब्राउज़र बंद कर देता है, तो उस तालिका में इसकी पंक्ति Session_End ईवेंट पर हटा दी जाएगी, लेकिन ऐसा नहीं हुआ !!!)

    मैं क्या कर सकता हूं? इस समस्या के लिए कोई समाधान? क्या मुझे अपनी रणनीति बदलनी चाहिए या कोई समाधान है?

    मेरे खराब वाक्यविन्यास के बारे में क्षमा करें। मैं अंग्रेज़ी

    में नया हूँ किसी भी विचार हो सकता है उपयोगी

    संबंध

    Foroughi

    Update1: मैं का उपयोग नहीं करते एएसपी सदस्यता और मेरे उन अपने आप का प्रबंधन

    UPDATE2: मैं इनप्रोक mo का उपयोग करता हूं 20 मिनट के समय के साथ मेरे सत्र राज्य के लिए डी

  • +6

    उपयोगकर्ता द्वारा नया लॉगिन करने पर मौजूदा सत्र को लॉग करना आसान नहीं है? यह भी अधिक व्यावहारिक है जब उपयोगकर्ता किसी दूसरे स्थान पर लॉगआउट करना भूल जाता है (जैसे घर/काम)। –

    +0

    @marc_s धन्यवाद दोस्त और उनके बारे में खेद है –

    +0

    @AliForoughi: कोई समस्या नहीं - प्रश्न अभी भी स्पष्ट और पूरी तरह समझ में आता है –

    उत्तर

    2

    ब्राउज़र बंद होने पर सत्र_इंड ईवेंट आग नहीं होता है, यह तब होता है जब सर्वर को किसी विशिष्ट समय पर उपयोगकर्ता से अनुरोध प्राप्त नहीं होता है (डिफ़ॉल्ट 20 मिनट तक)। इसका अर्थ यह है कि यदि आप उपयोगकर्ताओं को हटाने के लिए सत्र_एंड का उपयोग करते हैं तो वे ब्राउज़र बंद करने के 20 मिनट बाद लॉगिन नहीं कर पाएंगे।

    दो वैकल्पिक रणनीतियों मन में

    1. आप जब उपयोगकर्ता पृष्ठ छोड़ ब्राउज़र में ऑनअनलोड घटना का उपयोग कर सकते सर्वर में एक प्रस्थान अनुरोध भेजने के लिए आते हैं (बेशक यह केवल अभी भी उपयोगकर्ता अगर काम करता है शुद्ध कनेक्टिविटी है)। जब आप पृष्ठ को फिर से लोड करते हैं तो ऑनलोड लोड ईवेंट भी ट्रिगर होता है, इसलिए आपको इसका ट्रैक रखना होगा कि ईवेंट का उपयोग करने के लिए ट्रिगर क्यों किया गया है।

    2. आप उपयोगकर्ता ऑब्जेक्ट में अंतिम अनुरोध का समय रखते हैं। इस तरह आप यह निर्धारित कर सकते हैं कि उपयोगकर्ता कितना सक्रिय है, और यह कितना संभव है कि उन्होंने साइट छोड़ी है। उदाहरण के लिए किसी ऐसे उपयोगकर्ता को ढूंढें जिसने दो मिनट तक कुछ नहीं किया है और उन्हें लॉग आउट कर दिया है।

    संपादित करें: एक अंतिम टिप्पणी में उठाया बिंदु के रूप में। अपनी आवश्यकता को '' के रूप में देखने के बजाय आपके पास केवल एक लॉगिन हो सकता है, इसलिए यदि आपका लॉग इन पहले से ही लॉगिन 'की अनुमति नहीं देता है, तो आप' 'में बदल सकते हैं, यदि आपके पास सत्र खोलने पर केवल एक लॉगिन हो सकता है तो इसे रद्द कर दिया जाएगा और एक नया बनाया गया। '

    इस तरह से आप इसे लागू करने के लिए एक और अधिक मजबूत विधि प्रदान करते हुए भी एक खाता नियम प्रति खाता नियम रखते हैं।

    +0

    मैं अपना प्रश्न अपडेट करता हूं, अब आप क्या सोचते हैं? –

    +0

    मुझे लगता है कि पहला व्यक्ति पर्याप्त अच्छा नहीं है, लेकिन दूसरा अच्छा है और मैं इस पर काम करूंगा, धन्यवाद आदमी :) –

    +1

    दोनों तरीकों से सर्वश्रेष्ठ प्राप्त करने के लिए तरीकों को जोड़ा जा सकता है। –

    1

    आपके पास यह समस्या है कि आप कहां/कहां स्टोर करते हैं, यह है कि उपयोगकर्ता एक सत्र को जीवित छोड़कर लॉग आउट नहीं कर सकता है। मैं निम्नलिखित का सुझाव देता हूं:

    1) जब उपयोगकर्ता लॉग आउट करता है या सत्र समाप्त होता है तो स्थिति बदलें (सत्र निष्क्रिय होने के मिनट के बाद समाप्त होता है, अपना वेब.config और global.asax देखें इवेंट हैंडलर)

    2) यदि कोई उपयोगकर्ता दूसरी बार लॉग इन करने का प्रयास करता है तो पिछले सत्र को लॉग आउट करने का विकल्प प्रदान करें।

    +0

    मैं अपना प्रश्न अपडेट करता हूं, अब आप क्या सोचते हैं? –

    0

    मुझे लगता है कि आपको smth कोशिश करनी चाहिए। इस तरह:

    तालिका संरचना:

    ID 
    UserID 
    Flag 
    

    उपयोगकर्ता आप में अपनी तालिका अपडेट लॉग इन और सच या और करने के लिए ध्वज सेट किया जाता है जब वह लॉग आउट झूठी के लिए यह सेट किया गया है या

    जब उपयोगकर्ता ने अपना ब्राउज़र बंद कर दिया तो आपको यह तय करना चाहिए कि क्या आप उसे लॉग आउट करते हैं या नहीं। यदि हाँ - आप के रूप में Session_End इस घटना को पकड़ने और उसे अपने आप से लॉग आउट और झूठी या

    2

    सबसे पहले करने के लिए तालिका अद्यतन एक संदेश प्रणाली के रूप में डेटाबेस का उपयोग नहीं करते। यह आपदा के लिए एक नुस्खा है।

    आपको क्या करना चाहिए एक शब्दकोश है जिसमें लॉग इन उपयोगकर्ता आईडी और एप्लिकेशन स्टोरेज में उनका अंतिम कार्य समय होता है। सर्वर को प्रत्येक 2-5 मिनट में पिंग करने वाले सभी पृष्ठों पर स्क्रिप्ट भी जोड़ें।

    एक बार पिंग प्राप्त हो जाने के बाद, उपयोगकर्ता आईडी के नवीनतम गतिविधि समय को अपडेट करें, और किसी भी उपयोगकर्ता आईडी को 'टाइम-आउट' हटाएं।

    +0

    आपदा? वाह, आपको अच्छा लगता है, मैं इस पर काम करूँगा दोस्त, धन्यवाद :) –

    +1

    सामान्य रूप से मैसेजिंग के लिए डेटाबेस का उपयोग करना एक बुरा विचार है कि यह बहुत अक्षम है। इस मामले में आप एप्लिकेशन स्टोरेज का उपयोग कर सकते हैं जो कि तेज़ तरीका है। साथ ही अन्य परिस्थितियों में आपको संचार को सही तरीके से काम करने के लिए डेटाबेस के शीर्ष पर जटिल प्रणालियों को लागू करने की आवश्यकता होती है (उदाहरण के लिए घटनाओं पर निर्भर होने के बजाय आवधिक चेक, आवधिक क्लीन-अप, यह देखने के लिए जांचें कि संदेश पढ़ा गया था या नहीं, आदि।)। इन सभी तंत्रों को आमतौर पर उचित अंतर-प्रक्रिया संचार ढांचे में लागू किया जाता है। – linkerro

    +0

    "घटनाओं पर भरोसा करने के बजाय आवधिक जांच"? !! हाँ मैं तुम्हें मिला, यह बुरा विचार नहीं है, धन्यवाद लिंकरो। मुझे लगता है कि आप डीबी के स्थान पर एक आवेदन स्थिति में सत्र जानकारी स्टोर करना चाहते हैं, और अपनी आखिरी गतिविधि स्टोर करते हैं? !! –

    संबंधित मुद्दे

     संबंधित मुद्दे