webForumDet fria alternativet

sessions och mysql...

22 svar · 470 visningar · startad av mahedel · sida 2 av 2

mahedelMedlem sedan juli 2002105 inlägg
#21

hmm...

jag vill kunna lägga in detta script på en sida som är välbesökt och den ska kolla om användarna i databasen har varit inne och sen bara stängt av browsern alltså sidan ska hämta hem alla värden från användare som inte har varit aktiva under 600 sekunder i tabellen varns namn på kolumnen är: "active"... och sen kolla om 600 sekunder har passerat... då ska den sätta kolumnen "online" till 0...

så vill jag ha det...

/Martin

MatteMedlem sedan aug. 20002 975 inlägg
#22

Egentligen skulle inte jag lägga mig i den här tråden då jag inte kan få något som helst sammanhang över vad som diskuteras i tråden. Men jag gör ändå ett försök och låtsas att jag bara läst sista inlägget.

Förutsättning.

Användaren har loggat in, och sessionsvariabeln $_SESSION['sess_id'] som är satt med id från medlemstabellen, som vi t.ex kan kalla för 'users'.

I tabellen users finns fältet 'active' som är av formatet TIMESTAMP eller DATETIME.
'active' sätts till aktuell tid vid inloggning.

I tabellen finns också fältet 'online'. Vi kan låta det vara av format INT.
'online' sätts till 1 vid inloggning.

För en standardinställning i PHP så är en sessions livslängd 24 minuter av inaktivitet (detta går att ändra i php.ini). Sessionscookien dör också när webbläsaren stängs. Så det första man har att göra är att kolla om sessionen fortfarande är igång. Det kan man t.ex göra med:

<?php // Överst på sidan
session_start();
// Om sessionen inte finns skicka till login
if (!isset($_SESSION['sess_id'])) {
  header("Location: login.php");
  exit;
}

Nästa sak är att sätta alla som har varit inaktiva mer än 600 sekunder till offline (online=0) i tabellen 'users'.

$sql = "UPDATE users SET online=0 WHERE active<DATE_SUB(now(), INTERVAL 600 SECOND) AND online=1";
mysql_query($sql);

Sedan uppdaterar vi besökaren tid med

$sql = "UPDATE users SET active=now(), online=1 WHERE id={$_SESSION['sess_id']}";
mysql_query($sql);

Detta är det sätt jag skulle arbetat på.

Vill du dessutom ha att din besökare ska tvingas logga in igen om han inte varit aktiv de senaste 600 sekunderna så kan du lägga till följande mellan dina andra sql-satser:

$sql = "SELECT online FROM users WHERE id={$_SESSION['sess_id']}";
$result = mysql_query($sql);
if (mysql_result($result, 0) == 0) {
  session_unset();
  session_destroy();
  header("Location: login.php");
  exit;
}

Jag har inte testat detta men det borde fungera.

mahedelMedlem sedan juli 2002105 inlägg
#23

tjo

jag löste det såhär.... påminner om din matte...

knåpade ihop detta några minuter innan du skickade din...

<?

    require("db.php");
    // Lägg detta i db.php ****
    mysql_connect("localhost","$dbu","$dbp");
    mysql_select_db("filip");
    // ***********************
    $tid = time();

    $result = mysql_query("SELECT online,status FROM mingla WHERE status < '$tid' - 60") or die ("Fel #" . mysql_errno() . ": " . mysql_error());
    $num = mysql_num_rows($result);

    if (!$num)
    {
        // INTE INLOGGAD
      header("location: loggaut.php");
    }

    $data = mysql_fetch_array($result);

    if ($data["status"] < time() - 60)
    {
        mysql_query("UPDATE mingla SET online='0' WHERE status < '$tid' - 60") or die ("Fel #" . mysql_errno() . ": " . mysql_error());
    }

?>

/Martin

141 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)