Avatar billede Slettet bruger
21. februar 2011 - 20:52 Der er 8 kommentarer og
1 løsning

Hjælp til Sessions og Cookies

Jeg har nogle store problemer med at forstå cookies.

Lige nu køre min hjemmeside med Sessions.

Men jeg vil gerne have at når mine bruger ikke har været aktive i fx 1 time. Så skal de logge ind igen.

Lige nu ligger jeg oplysninger ind i session når brugerne logger ind.


$_SESSION['loginok'] = "ok";
$_SESSION['username'] = "username";
$_SESSION['lvl'] = $row["level"];



Og når de logger ud fjerner jeg det igen med dette:

$_SESSION['loginok'] = "logout";
$_SESSION['lvl'] = "0";


Jeg vil jo så gerne at både
$_SESSION['lvl'] og $_SESSION['loginok'] også skal blive "logout" og "0" hvis der er gået mere end en time.

Og det skal jo gøres med Cookies.

Men hvordan gør jeg så det?

På forhånd tak :)
Avatar billede The_Buzz Novice
21. februar 2011 - 21:30 #1
Tror du misforstår...

Session cookies ligger på serveren, og gemmes så lang tid som enten browseren er åben, eller du har sat i din session timeout php.ini - eller du kører session_destroy() eller session_unset()

Browser cookies, gemmes derimod i så lang tid som du beder om. Eller indtil man flusher sine cookies, sletter dem, eller andet.
Avatar billede The_Buzz Novice
21. februar 2011 - 21:32 #2
http://prajapatinilesh.wordpress.com/2009/01/14/manually-set-php-session-timeout-php-session/

// Get the current Session Timeout Value
$currentTimeoutInSecs = ini_get('session.gc_maxlifetime');

ini_set(‘session.gc_maxlifetime',30);
ini_set(‘session.gc_probability',1);
ini_set(‘session.gc_divisor',1);
//————————————————————————————-
//if you want to change the  session.cookie_lifetime.
//This required in some common file because to get the session values in whole application we need to write session_start();  to each file then only will get $_SESSION global variable values.

$sessionCookieExpireTime=60*60;
session_set_cookie_params($sessionCookieExpireTime);
session_start();

Skulle få alle dine sessions til at time ud efter 60 minutter
Avatar billede danco Nybegynder
21. februar 2011 - 21:48 #3
Det er var bare et spørgsmål om du ligger en cookie med login tidspunktet og så længe den værdi er under 60 min større så er man logget ind, eller bliver man logget ud.

En cookie opretter du ved hjælp af følgende syntax
setcookie(name, value, expire, path, domain);


så det kunne fx være:
setcookie("user", "Alex Porter", time()+3600);



Så henter du jo naturligvis bare din cookie frem i forbindelse med tjekket:
$userCookie = $_COOKIE["user"];
Avatar billede Slettet bruger
21. februar 2011 - 21:50 #4
Se ud er jeg så endnu mere forvirret.

Jeg læste mange steder at man ikke kunne tidsindstille session.
Og det du giver mig blader cookies ind i session.

Vi er ude i nogle ting jeg ikke har arbejdet med før.
Har prøvet at læse det link du gav mig, men forstår det ikke helt.

Hvad gør hver af disse linjer:
ini_set(‘session.gc_maxlifetime',30);
ini_set(‘session.gc_probability',1);
ini_set(‘session.gc_divisor',1);

$sessionCookieExpireTime=60*60; <-- Må jo være 60 gange 60 sek. Men hvorfor er der cookie med i?
session_set_cookie_params($sessionCookieExpireTime);

Og gør dette så session dør 1 time efter login.
Eller 1 time uden aktivitet?
Avatar billede The_Buzz Novice
22. februar 2011 - 07:48 #5
@ddd_dendummedreng: Det er netop cookies - men de gemmes på serveren og ikke lokalt ved brugeren.. Derfor er det "PHP Session Cookies".

$_SESSION = server cookies
$_COOKIE = users cookies

Mht dit sidste spørgsmål - dette slår session ihjel efter en time inaktivitet.

Hvis du vil have at de KUN må være online i 60 minutter, kunne danco's løsning være en mulighed.
Avatar billede The_Buzz Novice
22. februar 2011 - 07:55 #6
Fra http://php.net/manual/en/session.configuration.php :
session.gc_maxlifetime integer
session.gc_maxlifetime specifies the number of seconds after which data will be seen as 'garbage' and potentially cleaned up. Garbage collection may occur during session start (depending on session.gc_probability and session.gc_

Note:
If different scripts have different values of session.gc_maxlifetime but share the same place for storing the session data then the script with the minimum value will be cleaning the data. In this case, use this directive together with session.save_path.

session.gc_probability integer
session.gc_probability in conjunction with session.gc_divisor is used to manage probability that the gc (garbage collection) routine is started. Defaults to 1. See session.gc_divisor for details.

session.gc_divisor integer
session.gc_divisor coupled with session.gc_probability defines the probability that the gc (garbage collection) process is started on every session initialization. The probability is calculated by using gc_probability/gc_divisor, e.g. 1/100 means there is a 1% chance that the GC process starts on each request. session.gc_divisor defaults to 100.
Avatar billede Slettet bruger
22. februar 2011 - 11:46 #7
Først og fremmest så må de være online så meget de vil.
Vil bare have at når de går ud af siden og kommer tilbage 30 min senere, så skal de logge ind igen..

Som jeg beskrev har jeg prøvet at læse diverse artikler om dette. Men jeg har ikke forstået det. Er blevet mere forvirret nu hvor session og cookies er blevet sat sammen. Alle de indlæg jeg har kigget på ang at slette session efter x antal min, har svaret været at det kunne man kun med cookies.

@The_buzz:
Det link og den tekst du har sat ind har jeg kigget på flere gange. Bl.a. i går efter dit forslag, hvor jeg googlede det for at se om der stod noget om det.
Men har kæmpet med at være ordblind og har store problemer med at forstå de sider der beskriver på engelsk.

Men som jeg forstår det:

session.gc_maxlifetime:
Sætter et antal sekunder og så kan data måske blive lagt som affald.

Så er mine spørgsmål bare:
Er det alle mine sessions der bliver gjort til affald, eller skal man vælge nogen bestemte?
Skal det bare indsættes på alle sidder før session_start();?

Og der står "potentially", hvilket jeg har forstået som "muligvis" altså efter den tid vil data muligvis blive lavet til affald. Så er det vel ikke sikkert at de bliver lavet til affald.


De 2 andre Session.gc har jeg haft igennem google oversætter, som jo ikke altid er lige god. Men tror da at den oversatte dem godt nok. Problemmet ligger lidt i at jeg slet ikke forstår hvorfor de er der. Hvordan sletter de noget som helst. Jeg læser det som om det er et lykkehjul der afgøre om affalds effekten skal starte eller ej...


$sessionCookieExpireTime=60*60;
session_set_cookie_params($sessionCookieExpireTime);


Denne her sætter session cookie til at udløbe efter 60*60 sek altså 1 time. Men er de 3 linjer du skrev ovenover så nødvendige?

Som jeg forstår det skal disse 2 linjer være i en fil som er fælles for alle sider, er det korrekt forstået?

Og hvis jeg laver en udløbstid på nogle session cookies, burde jeg så ikke også starte med at lave mine sessions om til sessions cookies? Eller det behøver man måske ikke?
Avatar billede Slettet bruger
24. februar 2011 - 18:16 #8
Kan ingen svare på mine spørgsmål?
Avatar billede Slettet bruger
25. februar 2011 - 13:59 #9
Lukker.
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