User Online + Count etc.

Ok, nehmen wir an wir mchen das so, was ist dann mit Usern,
die eigentlich gar nicht mehr auf der Seite sind, aber trotzdem eingeloggt sind.
Nun wird ja activetime immer wieder geupdatet und die Benutzer sind also die ganze Zeit
eingeloggt.
Nun meldet sich der User nach 5 Stunden wieder an und erfährt: "User ist bereits eingeloggt",
weil die activetime immer wieder geupdatet wurde und somit mit der Loginzeit mehr oder weniger übereinstimmt.
 
Nein, wieso dass denn?
sry hab bei dem Code die bedingung vergessen

der komplette code sollte in etwa so aussehen

PHP:
if (isset($_SESSION['user_name']){
    $name = $_SESSION['user_name'];
    mysql_query("UPDATE accounts SET activetime = NOW() WHERE name = '$name'");
}

Falls nun die Session abläuft wird beim erneuten login die IP adresse mit der in der Datenbank gespeicherten verglichen, wenn's die gleiche ist > login
wenns nicht die gleiche ist, wird vorher überprüft ob die differenz zwischen "activetime" und der jetzigenzeit (mit timestamp) größer als 30min ist.
Wenn das der fall ist > login erfolgreich
wenn das nicht der fall ist > User Aktiv > echo "User bereits eingeloggt!";

Ich probier's einfach mal, aber so wie ich mir das vorstelle müsste das eigentlich hinhauen...
 
Na also, da haben wirs, mit der Bedingung ist es auf jeden Benutzer genau zugeschnitten,
wie ich es vorgeschlagen habe, wenn activetime allerdings global wäre würde es nicht hinhauen.
Da haben wir wohl aneinander vorbeigeredet;)
 
Na also, da haben wirs, mit der Bedingung ist es auf jeden Benutzer genau zugeschnitten,
wie ich es vorgeschlagen habe, wenn activetime allerdings global wäre würde es nicht hinhauen.
Da haben wir wohl aneinander vorbeigeredet;)

Glaub ich auch xD naja wie gesagt, ich teste das mal, wenn's klappt, hat sich das wohl erledigt :D
 
Okay es klappt.

Für Leute die es mal probieren wollen, der Code

functions.php
PHP:
<?php

function mysql_timestamp($date){
  list($arr1, $arr2) = explode(" ",$date);
  list($year,$month,$day) = explode("-",$arr1);
  list($hour,$minute,$second) = explode (":",$arr2);
  return sprintf("%04d%02d%02d%02d%02d%02d",$year,$month,$day,$hour,$minute,$second);
}

?>

activecheck.php
PHP:
<?php 

include('dbconnect.php');
require_once 'functions.php';
session_start();
mysql_connect($dbserver, $dbuser, $dbpasswd);
mysql_select_db($dbname);

if (isset ($_SESSION["user_id"])){ 
   $userid = $_SESSION["user_id"];
   mysql_query("UPDATE accounts SET lastaction = NOW() WHERE acctid = '$userid'");
}

$checkactive = "SELECT * FROM accounts WHERE loggedin = ".true."";
$activequery = mysql_query($checkactive);

while ($fetch = mysql_fetch_array($activequery)){
   $time = time();
   $timeformat = date("Y-m-d H:i:s",$time);
   $time1 = mysql_timestamp($timeformat);
   $time2 = mysql_timestamp($fetch[lastaction]);
   $timedifference = $time1-$time2;
   if ($timedifference>3000){
      mysql_query("UPDATE accounts SET loggedin = 0 WHERE acctid = '$fetch[acctid]'");
   }
}
?>

Für die Login.php folgende erweiterung:
PHP:
$onlinecheck = "SELECT * FROM accounts WHERE login = '$HTTP_POST_VARS[inputname]' AND loggedin = ".true."";
$onlineresult = mysql_query($onlinecheck);
if (mysql_num_rows($onlineresult)>0){
   $ipaddress = $_SERVER['REMOTE_ADDR'];
   $ipcheck = "SELECT * FROM accounts WHERE ipaddress = '$ipaddress'";
   $ipresult = mysql_query($ipcheck);
   if (mysql_num_rows($ipresult)>0){
      $data = mysql_fetch_array($result);
      $_SESSION['user_id'] = $data['acctid'];
	  $_SESSION['user_name'] = $data['name'];
      $_SESSION['user_login'] = $data['login'];
	  $_SESSION['user_email'] = $data['emailaddress'];
	  $_SESSION['user_superuser'] = $data['superuser'];
	  $ipaddress = $_SERVER['REMOTE_ADDR'];
	  mysql_query("UPDATE accounts SET loggedin = ".true.", lastaction = NOW(), ipaddress = '$ipaddress',laston = NOW() WHERE login = '$HTTP_POST_VARS[inputname]'");
	  header ("Location: home.php?op=loginsuccess");
   } else {
      header ("Location: home.php?op=allreadyloggedin");
   }
} else {
   $data = mysql_fetch_array($result);
   $_SESSION['user_id'] = $data['acctid'];
   $_SESSION['user_name'] = $data['name'];
   $_SESSION['user_login'] = $data['login'];
   $_SESSION['user_email'] = $data['emailaddress'];
   $_SESSION['user_superuser'] = $data['superuser'];
   $ipaddress = $_SERVER['REMOTE_ADDR'];
   mysql_query("UPDATE accounts SET loggedin = ".true.", lastaction = NOW(), ipaddress = '$ipaddress',laston = NOW() WHERE login = '$HTTP_POST_VARS[inputname]'");
   header ("Location: home.php?op=loginsuccess");
}

Jetzt in den Head jeder Datei include('activecheck.php');

Bei Fragen...fragt ;)
 
Zuletzt bearbeitet:
Zurück