Avatar billede ghostweb Nybegynder
18. marts 2005 - 13:06 Der er 19 kommentarer og
1 løsning

Automatisk logud

Heysa allesammen jeg har fået lavet mig et community nu.

når man logger ind bliver online sat til ja.

men når man går ud bliver den ikke sat til nej igen.

kan man ikke få en til at give / lave mig en kode så hvis brugeren ikke har lavet noget i 10 minutter bliver den sat på nej. ?
Avatar billede barklund Nybegynder
18. marts 2005 - 13:09 #1
Det smarteste er nok at lave en last_online i din tabel i databasen. Så kan du hele tiden når en bruger gør noget indsætte NOW() her - så kan du når du tæller online brugere vælge alle dem, for hvilket forskellen mellem NOW og last_online er under 10 minutter.

--
Morten Barklund
Avatar billede di8leva Nybegynder
18. marts 2005 - 13:10 #2
en idé (som jeg ikke prøvet, men skal prøve på min hjemmeside) er at hver gang brugerer henter en side så bliver en variabel i databasen sat til dato og tidpunkt. Når man så skal kigge efter hvis en brugere er online så er det ikke en boolean variabel, uden man kigger hvor lang tid har gått sen brugeren lavet noget, f.eks 10 minuter senere betyder udlogged.
Avatar billede di8leva Nybegynder
18. marts 2005 - 13:10 #3
"two bright minds gives one great idea" :)
Avatar billede ghostweb Nybegynder
18. marts 2005 - 13:14 #4
barklund, vil godt prøve dit først.

altser min sql er nu med sidste_login

og i login.php skal den vel lige rettes til:
mysql_query("UPDATE brugere SET online = 'ja' WHERE brugernavn = '$_SESSION[brugernavn]'") or die(mysql_error());

noget du kan hjælpe med?
Avatar billede barklund Nybegynder
18. marts 2005 - 13:32 #5
Hver gang brugeren besøger en side (og altså ikke kun ved login), skal du udføre:

mysql_query("UPDATE brugere SET sidst_online = NOW() WHERE brugernavn = '$_SESSION[brugernavn]'") or die(mysql_error());

Så holder du denne attribut opdateret.
Avatar billede TRoXa Novice
18. marts 2005 - 13:34 #6
<?
  $tid = date('U');
  mysql_query("UPDATE brugere SET online = 'ja',sidste_login='$tid' WHERE brugernavn = '$_SESSION[brugernavn]'") or die(mysql_error());
?>

hvis du så fx en include fil der køres på alle sider kan du lave en

<?
  $tid = date('U');
  mysql_query("UPDATE brugere SET online = 'ja',sidste_login='$tid' WHERE brugernavn = '$_SESSION[brugernavn]'") or die(mysql_error());
?>

i toppen af denne fil, eller hvis det er den samme index side for alle.

dermed vil den blive opdateret.

når du så vil lave et check på om de har været aktive indenfor 10 minutter, så laver du fx denne

<?
  $nutid = date('U') - 600;
  mysql_query("UPDATE brugere SET online='nej' WHERE sidste_login <= '$nutid'");
?>


så vil det nok også være en god idé at lave noget i retning af denne funktion på en side der kører hele tiden. fx en include fil eller index siden.

<?
  if (mysql_result(mysql_query("SELECT online,brugernavn FROM brugere WHERE brugernavn='$_SESSION[brugernavn]'"),0) == 'nej')
  {
    ?> <script> window.location="logud.php"; </script> <? // erstat logud.php med din logud fil.
  }
?>
?>
Avatar billede TRoXa Novice
18. marts 2005 - 13:36 #7
når du så vil lave et check på om de har været aktive indenfor 10 minutter, så laver du fx denne <-- skrevet forkert. Når du laver den funktion, så vil alle der har været in-aktive i mere end 10 minutter blive logget af, og med scriptet nede under vil de så blive logget HELT af igennem dit logud script hvis de er sat til nej i online i tabellen brugere :)
Avatar billede TRoXa Novice
18. marts 2005 - 13:37 #8
i mit tilfælde skal din sidste_login i tabellen være en INT(12)
Avatar billede ghostweb Nybegynder
18. marts 2005 - 13:40 #9
ser rigtig godt ud, har nu sat mit script til at køre med den indsætter en ny sidste login hver gang man logger ind, forstår desværre ikke helt med det andet og til det sidste du har skrevet har jeg desværre ikke en logud.php endnu.
Avatar billede ghostweb Nybegynder
18. marts 2005 - 13:42 #10
min sql:
CREATE TABLE `brugere` (
  `ID` int(10) unsigned NOT NULL auto_increment,
  `brugernavn` varchar(100) NOT NULL default '',
  `kodeord` varchar(100) NOT NULL default '',
  `online` varchar(100) NOT NULL default 'nej',
  `status` varchar(100) NOT NULL default '0',
  `sidste_login` int(12) NOT NULL default '0',
  PRIMARY KEY  (`ID`)
) TYPE=MyISAM AUTO_INCREMENT=8 ;
Avatar billede barklund Nybegynder
18. marts 2005 - 13:43 #11
aij, lave da sidste_login til en DATETIME, indsæt den som NOW() og test med DATE_SUB(NOW(), INTERVAL 10 MINUTES) < sidste_login - at gemme tid i int's og lave det i php er da direkte fjollet, når mysql fint understøtter det nativt.
Avatar billede ghostweb Nybegynder
18. marts 2005 - 13:49 #12
hmm forstår jeg ikke meget af, altser jeg skal lægge
<?
  if (mysql_result(mysql_query("SELECT online,brugernavn FROM brugere WHERE brugernavn='$_SESSION[brugernavn]'"),0) == 'nej')
  {
    ?> <script> window.location="logud.php"; </script> <? // erstat logud.php med din logud fil.
  }
?>

ind i min index fil, også burde det virke ?
Avatar billede barklund Nybegynder
18. marts 2005 - 14:01 #13
Vil du gerne have, at folk bliver smidt af, hvis de ikke har været aktive i 10 minutter, eller vil du bare bruge det til at registrere hvor mange, der har været aktive i 10 minutter?
Avatar billede ghostweb Nybegynder
18. marts 2005 - 14:04 #14
de skal smides ud.
Avatar billede barklund Nybegynder
18. marts 2005 - 14:09 #15
Smides ud lige frem - det skal vel bare logges af :)

Men du skal ikke bruge det til at registrere antal online, så?

I så fald skal du i toppen af hver eneste fil (i noget du includer alle steder hvor brugere skal være logget ind for at kunne se det) skrive:

<?php
$res = mysql_query("SELECT COUNT(1) FROM brugere WHERE brugernavn='$_SESSION[brugernavn]' AND DATE_ADD(sidst_online,INTERVAL 10 MINUTES) > NOW()");
if (mysql_result($res, 0) == "0") {
  // han er for gammel, log ham af
  session_destroy();
  header("Location: logind.php");
  exit;
}
mysql_query("UPDATE brugere SET sidst_online = NOW() WHERE brugernavn = '$_SESSION[brugernavn]'");
?>

Sidst linje skal også udføres lige efter logind.

Så burde det spille. :)

--
Morten Barklund
Avatar billede TRoXa Novice
18. marts 2005 - 15:43 #16
ja

<?
  if (mysql_result(mysql_query("SELECT online,brugernavn FROM brugere WHERE brugernavn='$_SESSION[brugernavn]'"),0) == 'nej')
  {
    ?> <script> window.location="logud.php"; </script> <? // erstat logud.php med din logud fil.
  }
?>

skal lægges ind i toppen af alle filer som kører for sig selv. Hvis alle sider kører igennem index siden, så vil det være nok bare at smide den i toppen af index siden.
Avatar billede TRoXa Novice
18. marts 2005 - 15:44 #17
barklund > ikke altid at session_destroy i det tilfælde er den bedste løsning hvis man nu bruger nogle af session variablerne efter en person er logget ud :) derfor er det bedre at pege personen til logud scriptet hvor man nulstiller session variablerne til det man har brug for. Hvis den nu i session husker hvilken side den sidst var på fx så vil den være blank efter session_destroy() .. ikke godt :) kan skabe stort kaos :)
Avatar billede barklund Nybegynder
18. marts 2005 - 16:29 #18
troxa, well, jeg går ud fra, at han selv kunne finde ud af at rette til det nødvendige. Måske det skal cleares nogle cookies og andre ting - ingen ved det.

Men det er da overhovedet ingen grund til at bruge javascript til at lave clientside redirect.

Hvis man har en generel logup.php så kan man enten bare require den eller bruge en location-header.
Avatar billede ghostweb Nybegynder
02. april 2005 - 19:41 #19
lukker..
Avatar billede barklund Nybegynder
02. april 2005 - 23:22 #20
Say what? Ingenting her hjalp dig overhovedet?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester