Avatar billede sijmonj Nybegynder
21. juli 2010 - 12:59 Der er 14 kommentarer og
1 løsning

login/logud script + point

Hej, jeg har lidt problemer med mit login script og logud.

+ at mit point system ikke virker helt som jeg gerne vil have det :P.


når man logger ind bliver man ikke altid logget ind :S.

Når man logger ud så er ens log ud time forkert
klokken er 09:23 - 21-07-2010 men der står      2021-07-10 07:22:58.

når man logger ud så får man rigtig rigtig mange point, men har ikke lavet sån et point system før så ved ikke helt hvad jeg gør forkert, man burde få 5 point i timen.

det med at den sætter af til offline efter nogen min, hvordan kan jeg sikre at den ikke os smider mig selv af?, hvis jeg nu satte den til fx. 5min.

her er min kode

http://pastebin.com/kk2WWpuu
Avatar billede jakobdo Ekspert
21. juli 2010 - 13:05 #1
Prøv at test denne kode:

<?php
echo 'Klokken på "min" server er: ' . date('H:i:s');
?>

Og se om den giver dig korrekt svar.
Dog bør tiden ikke være det store problem, da logind og logud bør tjekkes mod samme tid.
Avatar billede jakobdo Ekspert
21. juli 2010 - 13:08 #2
I din kode her:
$additional_online_seconds = $logout_time - $login_time;

Hvor kommer $login_time fra ?

Jeg kan se du sætter den i linje 88: $login_time = time();
men den er jo ikke sat i linje: 44
Avatar billede sijmonj Nybegynder
21. juli 2010 - 18:15 #3
den udskriver

Klokken på "min" server er: 16:13:58

og klokken er 18:14 :(

jeg prøver at sætte login_time høejre op
Avatar billede sijmonj Nybegynder
21. juli 2010 - 18:21 #4
men ved du hvordan det kan være jeg ikke bliver sat til online hver gang jeg logger ind, det da meget mærkeligt
Avatar billede sijmonj Nybegynder
21. juli 2010 - 18:29 #5
så nu bliver man logget på lige meget hvad jeg satte session_destroy(); længere ned når man logger ud, den har åbenbart ikke fået slettet alt. ved du det med at kicke dem som ikke har været aktiv i x antal min. hvorfor det ikke virker? og skal det være samme tid som den tid man selv bliver kicket hvis man ikke er aktiv i 20 min?


if(isset($_GET['logaf']) && $_GET['logaf'] == "ja")
{
   
    $logout_time = time();
    $login_time = time();
    $additional_online_seconds = $logout_time - $login_time;
    $additional_points = ($additional_online_seconds / 60) / 15;
   
    $sidst_set = date("d-m-y - h:i:s");
    //Retter online til 0
    $mysql = connect();
    $stmt = $mysql->prepare("UPDATE users SET online = '0', onlinetid = onlinetid+$additional_online_seconds, point = point+$additional_points, sidst_set = '$sidst_set' WHERE username = '$_SESSION[username]'") or die($mysql->error);
    $stmt->execute();
    session_destroy();
    header("location:index.php");
}
Avatar billede jakobdo Ekspert
21. juli 2010 - 18:50 #6
Det du jo primært skal sørge for, er at når en bruger logger ind, så sætter du:

$_SESSION['login_time'] = time();
Dermed har du tidspunkt for hvornår brugeren er logget ud.

Så kan du lave en funktion som hedder logud.
Den skal jo lave noget ala:

$logout_time = time();

$diff = $logout_time - $_SESSION['login_time']; //Giver forskel i sekunder...

Omregn til minutter:
$minutes = floor($diff / 60);
Omregn til timer:
$hours = floor($diff / 3600);

Så kan jeg dog se et andet problem, hvad hvis en bruger ikke trykker LOGUD ?

Så kunne du jo gøre det, at du med dit tjek script, tjekker hvem der ikke har været "online" de sidste 20 minutter og beregne på sidst brugeren lavet noget og så lave samme trick mod deres login_tid. Dog bør du så logge login_time i databasen, da du jo ikke har en session til rådighed på "offline" brugere.

Der er mange ting som skal på plads ja.
Men start med et punkt og lad os se om vi ikke kan løse det hen ad vejen.
Avatar billede sijmonj Nybegynder
21. juli 2010 - 19:08 #7
det med at kicke en person er det ikke sådan her


#kicker person som ikke har været aktiv i 20 min.
$mysql = connect();
$stmt = $mysql->prepare("UPDATE users SET online = '0' WHERE onlinetid <= 1200") or die($mysql->error);
$stmt->execute();

kan jeg godt lave det her
$sidst_set = date("d-m-y - h:i:s");

om til time() og så få dato og timer hvornår personen er logget ud?
Avatar billede jakobdo Ekspert
21. juli 2010 - 19:40 #8
Ja, time() er unixtimestamp og kan laves om til en læselig dato via date() eller strftime()
Avatar billede sijmonj Nybegynder
21. juli 2010 - 20:07 #9
men det bare mærkeligt at dato'en er forkert :S, hvad kan jeg gøre ved det?
Avatar billede jakobdo Ekspert
21. juli 2010 - 20:12 #10
Når du siger dato, mener du så dato eller "bare" tiden ?

Hvis du har egen server, så retter du tiden så den passer, anvend evt. ntp.
Er det et webhotel, som kontakt udbyder og spørg om de ikke kan rette tiden til.
Avatar billede sijmonj Nybegynder
21. juli 2010 - 20:25 #11
mener tiden :).

okay jeg vil kontakte udbyderen :)
Avatar billede jakobdo Ekspert
21. juli 2010 - 20:33 #12
Men om tiden er forkert eller ej, bør jo faktisk ikke betyde noget.
20 minutter er jo stadig 20 minutter. :o)
Så jeg tror nu stadig du skal kigge din kode efter og lave lidt debug.
Avatar billede sijmonj Nybegynder
14. november 2010 - 15:51 #13
tak smid svar :)
Avatar billede jakobdo Ekspert
15. november 2010 - 21:09 #14
Svar
Avatar billede jakobdo Ekspert
16. november 2010 - 17:05 #15
Takker for point
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