यदि उपयोगकर्ता ऑनलाइन है, तो यह निर्धारित करने का सबसे आसान तरीका क्या है?(PHP/MySQL)




javascript offline (7)

क्या कोई तरीका है जिससे मैं यह पता लगा सकूँ कि उपयोगकर्ता ऑनलाइन है या नहीं?

यानी: लॉग ऑन का उपयोग करें, मैंने $ _SESSION वैरिएबल सेट किया है, उपयोगकर्ता समय-समय पर कुकी गारबेज कलेक्टर को अपनी स्थिति को ऑफ़लाइन अपडेट करने के लिए डेटाबेस अपडेट करता है।

EDIT: मैं एक ऐसा समाधान चाहता हूं जिसमें बार या दिनांक शामिल न हों। मैं सत्र या कुछ इसी तरह की सवारी करना चाहता हूं। अगर कोई ऑनलाइन है तो यह अनुमान लगाना कि मुझे जो चाहिए वह उसके लिए पर्याप्त नहीं है।


आप onunload टैग का उपयोग भी कर सकते हैं ... शरीर पर अधिक जानकारी यहां ( https://www.w3schools.com/jsref/event_onunload.asp )

इस तरह आपको उपयोगकर्ता को ऑफ़लाइन होने के लिए 4 -5 मिनट इंतजार नहीं करना पड़ेगा।

लेकिन आप अभी भी ajax अद्यतन विधि का उपयोग करना चाहिए उपयोगकर्ता के ब्राउज़र दुर्घटनाओं ...


आपकी स्थिति पर निर्भर करता है, आपके लिए कॉलम के साथ एक अलग तालिका "जिसका-ऑनलाइन": "आईपी" और "अंतिम-अद्यतन-समय" बनाना और किसी उपयोगकर्ता द्वारा किसी पृष्ठ को लोड करने पर हर बार इस तालिका को अपडेट करना बेहतर हो सकता है।

पृष्ठ लोड प्रश्नों में शामिल हो सकते हैं :

  1. IP के आधार पर वर्तमान उपयोगकर्ता के लिए "जिसका-ऑनलाइन" तालिका अद्यतन / सम्मिलित करें।
  2. "समाप्त हो गई" पंक्तियों को हटा दें (समय-समय पर क्रोनजोब का उपयोग करके भी किया जा सकता है)।
  3. "सक्रिय" उपयोगकर्ताओं की गणना करें।

इस तकनीक का उपयोग करने के लाभ :

  1. यदि कोई उपयोगकर्ता लॉग इन नहीं है, तो उसे अभी भी गिना / ट्रैक किया जा रहा है।
  2. आपके पास मौजूद उपयोगकर्ताओं की मात्रा पर निर्भर करता है, इस तालिका को क्वेरी करना जल्दी हो सकता है।

नोट: यदि आप इसका उपयोग करते हैं तो आपको यह ध्यान रखना चाहिए कि कोई भी पृष्ठदृश्य आपकी तालिका में एक पंक्ति बनाएगा ताकि उपयोगकर्ता के आधार पर आप बॉट्स की अवहेलना कर सकें या केवल लोकप्रिय लोगों (फ़ायरफ़ॉक्स, IE, सफारी, ओपेरा, आदि) की गिनती कर सकें।


एक बात मैं सलाह दूंगा कि इस तरह की जानकारियों को मेमोरी में स्टोर करना है, उदाहरण के लिए मेमस्कैल्ड या माईस्कल हीप या रेडिस। क्योंकि अन्यथा डेटाबेस बहुत हिट हो जाएगा।


ऐसा लगता है कि आपका "व्यक्ति ऑनलाइन है" तुलना तर्क समयजोन को ध्यान में नहीं रखता है। यदि आप इस तरीके से टाइमज़ोन के साथ काम कर रहे हैं, तो मैं दृढ़ता से अनुशंसा करता हूं कि आप अपना सारा समय GMT में स्टोर करें, और अपने उपयोगकर्ताओं को प्रदर्शित करने से ठीक पहले उन्हें अपने उपयोगकर्ताओं के लिए स्थानीय समय में परिवर्तित करें। यह किसी भी तुलनात्मक संचालन को बहुत सरल बना देगा।

here timezones के बारे में एक अच्छा SO थ्रेड here


तालिका में समय-क्षेत्र संग्रहीत करें, और यह देखने के लिए कि उपयोगकर्ता पृष्ठ देखने के उपयोगकर्ता के स्थानीय समय की तुलना में स्थानीय समय की गणना में इसका उपयोग करें।

संपादित करें:

बेहतर अभी तक, सर्वर समय के रूप में सभी समय की दुकान, और केवल सर्वर समय के सापेक्ष सभी गणना आधार।


परिभाषा (असंभव के बाद) आप जो पूछ रहे हैं, वह असंभव है। HTTP एक कनेक्शन रहित प्रोटोकॉल है, इसलिए जैसे ही किसी उपयोगकर्ता ने एक पृष्ठ मारा है और सभी सामग्री सर्वर से उपयोगकर्ता के ब्राउज़र पर वापस आती है, दोनों के बीच कोई संबंध नहीं है। आपकी वेबसाइट पर किसी दूसरे से कम समय के लिए कोई "ऑनलाइन" है।

एक चीज जो आप कर सकते हैं वह यह है कि आपके वेब पेज पर जावास्क्रिप्ट है एजेएक्स अनुरोधों को नियमित रूप से अपने सर्वर पर वापस करें जिसमें जानकारी की पहचान करना शामिल है, और उपयोगकर्ता द्वारा पेज छोड़ने पर एक अलग AJAX अनुरोध, जिसमें window.onbeforeunload का उपयोग किया गया है।


यहाँ दो मिनट के बीच के अंतर को मिनटों में कैसे प्राप्त किया जा सकता है, इस पर एक तरीका है, फिर अंतर की जाँच करें और ऑनलाइन / ऑफ़लाइन स्थिति सेट करें।

$query = 'SELECT * FROM Users';
$result = mysqli_query($mysqli, $query);

foreach($result as $user){
    // date from the database
    $dbLastActivity = date("d-m-Y h:i:s a", strtotime($user['lastOnline']));
    // date now
    $now = date("d-m-Y h:i:s a", $date);

    // calculate the difference
    $difference = strtotime($now) - strtotime($dbLastActivity);
    $difference_in_minutes = $difference / 60;

    // check if difference is greater than five minutes
    if($difference_in_minutes < 5){
        // set online status
        $updateStatus = 'UPDATE Users SET Status="online" WHERE lastOnline="'.$user['lastOnline'].'"';
    } else {
        // set offline status
        $updateStatus = 'UPDATE Users SET Status="offline" WHERE lastOnline="'.$user['lastOnline'].'"';
    }

    // check if mysqli query was successful
    if (!$mysqli->query($updateStatus)){
        printf("Error Message %s\n", $mysqli->error);
    }
} 






offline