Avatar billede Milla-Tigerdyr Praktikant
17. september 2011 - 18:56 Der er 23 kommentarer og
1 løsning

Jeg "taber" min session

Hej igen eksperter.
Nu er jeg kommet videre med mit online system, dog virker det ikke helt korrekt endnu.
Jeg har i min checklogin.php fil, en linje der sender ens brugernavn videre til min tabel user_online. http://pastebin.com/h7Nudy53

Det virker helt fint, men når jeg så FØRSTE gang kommer ind på user_online.php: http://pastebin.com/wAmLWpfs
Så viser den KORREKT hvem der er online. Hvis jeg så går ind på en anden side, så når jeg kommer tilbage siger den at der ingen mennesker online er.

Det er som om jeg taber min session, og det er lige meget om jeg gør dette indenfor 5 sekunder (har testet), eller om jeg gør det indenfor 5 minutter (har testet).

Jeg har session_start(); på ALLE mine sider.
Avatar billede LilleUdvikler Nybegynder
17. september 2011 - 19:27 #1
Hvad bruger du session_id() til? Hvad skal det gøre godt for?

Jeg ville bruge $_SESSION['loggetind'];

Når de logger ind, sætter du den til true. Så kan du på de forskellige sider tjekke om den SESSION er sat:

if(isset($_SESSION['loggetind'])){
//Gør det du vil have.
}

Eller - som jeg selv gør, så tjekker jeg hvjs den IKKE er sat - så lav en header("Location: "); til din forside eller hvad du ønsker.

Altså:

if(!isset($_SESSION['loggetind'])){
header("Location: index.php");
}

Så kan du bruge fx - $_SESSION['username']; til at udskrive hvem der er logget ind - for eksempel
echo "Du er logget ind som". $_SESSION['username'];
Avatar billede LilleUdvikler Nybegynder
17. september 2011 - 19:29 #2
Hvis du vil gøre det på den måde skal du ændre din count til:

if($count==1){
// Register $myusername, $mypassword and redirect to file "login_success.php"
$_SESSION['myusername'] = $myusername;
$_SESSION['loggetind'] = $loggetind;
$_SESSION['userid'] = mysql_result($result,0);
mysql_query("INSERT INTO user_online(session, myusername) VALUES('$session', '$myusername')");
header("location:login_success.php");
}

Har ændret din ene VALUES "session_id" til $session. Du har jo givet den i toppen.
Avatar billede Milla-Tigerdyr Praktikant
17. september 2011 - 19:33 #3
Jeg har brugt sessions_id fordi den er lavet efter en tutorail, hvor den talte hvor MANGE der er online.

Men for at tjekke om folk er logget ind plejer jeg altså at bruge der userid.
F.eks står der i toppen af hver side hvor man skal være logget ind;

$userid = $_SESSION['userid'];
if(!is_numeric($userid)) { die('Af sikkerhedsmæssige årsager er siden stoppet i at loade. Kontakt webmaster hvis fejlen fortsætte'); exit(); }
Avatar billede kjeldsted Novice
17. september 2011 - 21:20 #4
Du kan jo ikke fra serveren tælle antallet af online brugere. En session er gemt på klienten (brugerens computer) og info om disse, har serveren ikke umiddelbart mulighed for at hente.

Har du et link til denne tutorial? For kunne da tænkte mig at se hvordan de påstår at den slags kan lade sig gøre.
Avatar billede Milla-Tigerdyr Praktikant
18. september 2011 - 09:46 #5
kjeldsted, ja men det er vidst fordi denne her tutorail fortæller hvor mange der er online.
Jeg har så forsøgt at udbygge den til at fortælle HVEM der er online, men det virker kun første gang man går ind på siden :s
http://www.phpeasystep.com/phptu/9.html
Avatar billede kjeldsted Novice
18. september 2011 - 09:54 #6
Okay. Nu er jeg med. Du gemmer infomationerne i en MySQl.
Virkede det før du lavede en om til at tælle hvem der er online?
Avatar billede Milla-Tigerdyr Praktikant
18. september 2011 - 09:56 #7
kjeldsted, tjaeh den var nok ikke verdens bedste, fordi hvis man lige havde logget ind ville den sige der var 2 online, hvis man så gik ind på en anden side, og derefter tilbage for at tjekke, så var man altså den eneste online.

Men dybest set virkede den vel.
Avatar billede kjeldsted Novice
18. september 2011 - 10:00 #8
Har du tjekket i MySQLen hvor mange linjer der er første gang du kigger, anden gang og sådan?

Og så undrer det mig hvis det virker første gang. For jeg kan ikke se hvor du indsætter 'myusername' i tabellen 'user_online'. Så det burde da slet ikke virke :s
Avatar billede Milla-Tigerdyr Praktikant
18. september 2011 - 10:06 #9
Det burde den gøre i "checklogin.php" omkring linje 33 (er ikke helt sikker på det præcis er linje 33 )

- Hm, hvad mener du med at tjekke MySQLen?
Avatar billede kjeldsted Novice
18. september 2011 - 10:13 #10
Dér indsætter du jo så ikke noget tid ;)
Avatar billede Milla-Tigerdyr Praktikant
18. september 2011 - 10:21 #11
Hmm..hvordan skal jeg indsætte tid?:)
Avatar billede kjeldsted Novice
18. september 2011 - 10:23 #12
$time = time();
mysql_query("INSERT INTO user_online(session, myusername, time) VALUES('session_id', '$myusername', '$time')");
Avatar billede Milla-Tigerdyr Praktikant
18. september 2011 - 10:28 #13
Jo tak nu virker det :D
Men hvis jeg går ind direkte efter at have logget ind, så viser den mit navn to gange??
Avatar billede kjeldsted Novice
18. september 2011 - 10:34 #14
Det er lidt at tage den lette omvej, for at løse problemet og ikke optimalt.
Men du kunne jo bare bede den om ikke at medtage gentagelser inden for enten session_id eller brugernavn.
Avatar billede Milla-Tigerdyr Praktikant
18. september 2011 - 10:45 #15
Eh, hvordan det?
- og det er nok bedst at sige at den ikke skal gentage brugernavnet :)
Avatar billede kjeldsted Novice
18. september 2011 - 10:52 #16
$sql3="SELECT DISTINCT username FROM $tbl_name";
Avatar billede Milla-Tigerdyr Praktikant
18. september 2011 - 12:14 #17
Det skal være i user_online.php ikke?
Avatar billede kjeldsted Novice
18. september 2011 - 12:17 #18
Det er denne fil jeg har det fra: http://pastebin.com/wAmLWpfs, så det må være dér det skal ændres
Avatar billede Milla-Tigerdyr Praktikant
18. september 2011 - 15:56 #19
Så virker det også :-)
Kan man lave en, der udfor navnet så viser hvor lang tid brugeren har været online?
Avatar billede kjeldsted Novice
18. september 2011 - 16:16 #20
Så skal du udover at hente brugernavnet, også hente den gemte tid i databasen. Så tager du blot tiden vi har nu (time()) og trækker disse to fra hinanden :)
Avatar billede Milla-Tigerdyr Praktikant
18. september 2011 - 20:13 #21
eøøhm...
Avatar billede kjeldsted Novice
20. september 2011 - 21:14 #22
Først hiver du, sammen med brugernavnet, tiden ud og gemmer denne i en variabel. Så laver du en ny variabel hvor du tager time() og trækker variablen med tiden fra.

Det er vel alle trin du før har udført. Så det skal bare sættes sammen :)
Avatar billede Milla-Tigerdyr Praktikant
20. september 2011 - 21:16 #23
Okay, smider du lige et svar?:)
Avatar billede kjeldsted Novice
20. september 2011 - 21:22 #24
Hvis LilleUdvikler også vil have del i roget er det helt fint for mig :)
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