Bir kullanıcı php, üzerinden oturum açtı nasıl algılamak?

10 Cevap php

Kullanıcı başarılı bir şekilde oturum açtıktan sonra, ben veritabanında giriş = true saklayın. Kullanıcı çıkış butonuna tıklayarak olmadan tarayıcıyı kapatarak çıktınız Ama eğer nasıl kontrol edebilirim? Ve aynı zamanda, nasıl giriş sayfasını 10 dakika boyunca etkin olmuştur kullanıcıyı yönlendirmek?

Ben php ve mysql kullanıyorum. Herhangi bir yardım mutluluk duyacağız.

EDIT: Sorry if my question is not clear. I did use session to store whether they are logged-in or not. But, now I want to store the info in database, so that I can display their status on other pages. Let's say user1 has 3 friends. When displaying all his friends, user1 want to know whether his friends are online or offline. This is what I want. Any advise?

10 Cevap

Bir kullanıcı tarayıcısını kapatır veya PHP ile sitenizi kapalı zaman gittiğini algılayamaz ve bunu yapmanın JavaScript tekniklerini kadar garanti faydasız olmak gibidir.

Bunun yerine, en iyi bahis, her kullanıcının son aktivite zamanı saklamak için büyük olasılıkla.

  • 'Last_activity' çizgisinde kullanıcı tablodaki bir sütun oluşturun.
  • Bir kullanıcı bir sayfayı yükler zaman, şimdiki zaman kendi last_activity güncelleyin.
  • Kimin çevrimiçi bir listesini almak için, sadece 10/20/whatever dakika önce daha yeni last_activity değerlere sahip kullanıcılar için veritabanını sorgulamak.

Her kullanıcı acitivity damgası saklayın. O zaman daha 10 dakika önce olduğunda, logout yapın.

PHP, böyle bir şey yapabilirsiniz:

session_start();
if (!isset($_SESSION['LAST_ACTIVITY'])) {
    // initiate value
    $_SESSION['LAST_ACTIVITY'] = time();
}
if (time() - $_SESSION['LAST_ACTIVITY'] > 3600) {
    // last activity is more than 10 minutes ago
    session_destroy();
} else {
    // update last activity timestamp
    $_SESSION['LAST_ACTIVITY'] = time();
}

Aynı yerine veritabanı üzerinde yapılabilir. Orada hatta online "Şu an" olan kullanıcıların bir listesini alabilir.

Eğer 'online' olarak kullanıcıları izlemek için çalışıyorsanız, o zaman bireysel kullanıcı için bir oturum kullanarak düşünebilirsiniz ve bunun yerine, size veya başkalarına kendi durumunu görüntülemek için son etkinlik zamanı saklamak için db gerçek login = depolama kullanıcı. Eğer çevrimiçi kullanıcıların listenizi çekin, sadece son 10 dakika içinde 'last_activity' ile kullanıcılara dönmek için sql sorgusu oluşturun.

Bir kullanıcı kendi tarayıcı kapalı eğer algılayabilir eğer merak ediyor. Sen biraz javascript ile yapabilirsiniz ama bir sayfa talep edildiğinde PHP sadece çalışır beri, (javascript devre dışı bırakmak kolay olduğundan) ben buna güvenmek olmaz Ama PHP ile yapamazsınız. Değil sayfa açık olduğunda.

Güvenli olması için, kullanıcının son etkinliğini izlemek ve birkaç dakika (5/10) geçmiş ise o kullanıcı gitti üstlenmelidir. O olsa yine bir şey yaparsa (örneğin 6 dakika sonra) o çevrimiçi geri döndü.

It Bu problemlerin çoğunu çözecek içeri kullanıcı oturum wheter olmadığını kontrol etmek için bir oturum değişkeni login = true depolamak için daha iyi olabilir ;)

Normalde oturumlarda bu tür bilgileri koymak istiyorum.

$_SESSION['user'] = "A user name";

Ikis istediğiniz zaman sonra bunu:

session_destroy();

Seans here biraz daha bilgi ve tutorial.

Sen daha iyi oturum durumunu izlemek için oturum kullanmak bulur.

Read this information about sessions

AFAIK orada bir kişi tarayıcı penceresini kapatır (veya başka gitmek için size sayfa bırakır) ne zaman kontrol etmek için yolu yoktur böylece başkalarının yukarıda önerilen aktiviteyi kontrol etmek gerekir.

Bu 'ceejayoz' önce söylediklerini bir uzantısıdır.

Kullanıcıların periyodik hizmet ping ve hala Store'dan içeri oturumunda geçen ping zaman oturum açtığınızı anlatayım. Son ping oturumu söz konusu zaman daha büyükse, o zaman ping tekrar kullanımı hala hayatta olduğunu anlatmak için.

Eğer veritabanında ping alınan zaman saklayın. Son Ping isimli aldıysanız> keeplive eşik sonra kullanıcı siteyi bıraktı düşünün.

Eğer başlamak için aşağıdaki bazı denenmemiş örnek kod. Siz hangi kullanıcı etkinliği last_activity sütunu güncelleştirmek ne sıklıkta frekans kontrol etmek için "PING__FREQUENCY" kullanabilirsiniz.

define(PING_FREQUENCY,300); //5 mins
if (($_SESSION['lastPingTime'] + PING_FREQUENCE) > time()) {
    stillLoggedIn(); //execute a function to tell that the user is still logged in
}

function stillLoggedIn() {
    //Do SQL update to mark the last activity time for the user
}

En iyi yolu, kullanıcı kaydının her güncellemede DB son etkinlik damgası depolamak IMHO. Kapatma veya zaman aşımından sonra (cronjob ile zaman aşımı korumak) sadece sıfır değerine ayarlayın ve bayrak olarak kullanabilirsiniz.

$user = new User($user_id);
$user->logged_in = (bool)($last_activity > 0);

Bazen ettirmek söylemek gerekir. gibi "son on görüldü ...", daha sonra son aktivite bırakın ve sadece kullanıcıların masaya logged_in bir boolean bayrak (tinyint) ekleyin.