Gå til innhold

Session_destroy kode (PHP)


Anbefalte innlegg

Videoannonse
Annonse

Hvis du legger til en post i en tabell som inneholder brukerID og timestamp i databasen din (Går ut i fra at du bruker en database) for hver gang brukeren laster en side. Når brukeren laster en side sjekker den for det første om brukeren i det hele tatt har vært logget inn denne sessionen, før den sjekker i databasen i den tabellen jeg snakket om i stad hvor lenge siden det er siden siste gang det registrert at brukeren lastet en side. Hvis det er mer en 15 minutter siden, setter du f. eks en booleansk session variabel som sier om brukeren er logget inne eller ikke til false, hvis ikke er det bare å legge inn en post til i databasen med et nytt timestamp.

 

 

Er kanskje ikke den beste innen PHP men tror dette skulle fungere, eller om du i allefall gjør noe likende :)

Endret av Rockie
Lenke til kommentar

Hvis jeg har forstått det riktig, så vil du at brukeren automatisk blir logget ut etter 15 minutter? Altså, at etter 15 minutter blir brukeren redirecta ut fra siden. I såfall er det ikke mulig med PHP, siden PHP-scripts kjører når siden blir lastet/oppdatert.

 

Du KAN gjøre det med Ajax. Sende en Ajax-call hvert 15 minutt. Sjekke om info i MySQL faktisk er eldre enn 15 minutter gammelt, hvis ja kan du erstatte innholdet på siden med f.eks "Logg inn igjen", ved hjelp av innerHTML

Lenke til kommentar

Tror det trådstarter egentlig vil er at brukeren skal bli logget ut hvis han prøver å åpne en webside mer enn 15min siden han sist åpnet en side. Da trenger du ikke styre med ajax osv. Du trenger bare sjekke på hver side at bruker ikke har vært inaktiv mer enn 15min slik som Rockie beskrev. Har ikke drevet så mye med php men når jeg programmerer jsp så er creation time og last access time tilgjengelige i session objektene som gjør at du ikke trenger noen database. Rart om det ikke finnes noe lignende i php.

Lenke til kommentar

Åja, da kan man bare lage en:

 

if (!isset($_SESSION['last_active'])
   // Brukeren har ikke logget inn
else
{
   if ($_SESSION['last_active'] <= (time() + (60*15))
       // Ikke aktiv de siste 15 minuttene
   else
   {
       // Oppdaterer Sessionen
       $_SESSION['last_active'] = time();
   }
}

Endret av TheClown
Lenke til kommentar

Regner med du lagrer alle sessions i en tabell. Hvis du også har et felt som inneholder tiden i time() format og et felt som har unik session id, er dette ganske enkelt.

 

Da kjører du en sql spørring:

SELECT * FROM `sessions_tabell` WHERE `unik_id` = 'den unike id-en' LIMIT 1

 

Deretter henter du ut raden fra tabellen:

$result = mysql_query( $sql, $link );
$row = mysql_fetch_array( $result );

 

Så sjekker du om session tiden er utgått:

$session_expire = 900; // 900 sekunde = 15 minutter
if ( $row["sist_aktiv"] + $session_expire < time() ) {
 // Session er utgått
 $_SESSION = array();
 session_destroy();
} else {
 // Session er ikke utgått
 // Oppdater session databasen slik at "sist_aktiv" settes til time()
}

Endret av Tunafish
Lenke til kommentar

Det er ikke nødvendig å bruke database da, egentlig

 

Helt sant! Men bare hvis du ikke skal ha noe sikkert på siden.

Session cookies er veldig enkle å manipulere slik at $_SESSION["last_active"] eller $_SESSION["innlogget"] er ikke bra å bruke hvis du vil ha en litt sikker innlogging.

Lenke til kommentar

Helt sant! Men bare hvis du ikke skal ha noe sikkert på siden.

Session cookies er veldig enkle å manipulere slik at $_SESSION["last_active"] eller $_SESSION["innlogget"] er ikke bra å bruke hvis du vil ha en litt sikker innlogging.

Mener du her at man ikke skal bruke sessions i det hele tatt for å sjekke om en bruker er logget inn, eller bare for denne 15minutters valideringen? Det blir vell kanskje det samme egentlig? Ser i allefall ikke helt hvordan man ellers skal gjøre det, uten at jeg hverken er noe god i PHP eller at jeg har tenkte så mye over det.

 

Edit: Leste noe innelegg lengre opp, og ser hvordan man eller kan gjøre det. Men den unike IDen det var snakk om, hvordan skal den genereres? Bruker man bare den vanelige session IDen er vell litt av poenget borte? Ellers kan man jo bruke en vanelig ID i tabellen, men hvordan skal den "lagres" til neste gang brukeren laster en side?

 

Er som sagt ikke så god på dette, og jeg har heller ikke tenkte så mye på det så det er sikkert et ganske enkelt svar på dette.

Endret av Rockie
Lenke til kommentar

Helt sant! Men bare hvis du ikke skal ha noe sikkert på siden.

Session cookies er veldig enkle å manipulere slik at $_SESSION["last_active"] eller $_SESSION["innlogget"] er ikke bra å bruke hvis du vil ha en litt sikker innlogging.

Hva? Åssen da?

 

Edit: Leste noe innelegg lengre opp, og ser hvordan man eller kan gjøre det. Men den unike IDen det var snakk om, hvordan skal den genereres? Bruker man bare den vanelige session IDen er vell litt av poenget borte? Ellers kan man jo bruke en vanelig ID i tabellen, men hvordan skal den "lagres" til neste gang brukeren laster en side?

 

Er som sagt ikke så god på dette, og jeg har heller ikke tenkte så mye på det så det er sikkert et ganske enkelt svar på dette.

Må bli i form av COOKIE eller SESSIONID, på en eller annen måte. Støtter forsatt min metode.

Lenke til kommentar

Det er ikke nødvendig å bruke database da, egentlig

 

Helt sant! Men bare hvis du ikke skal ha noe sikkert på siden.

Session cookies er veldig enkle å manipulere slik at $_SESSION["last_active"] eller $_SESSION["innlogget"] er ikke bra å bruke hvis du vil ha en litt sikker innlogging.

Den her tror jeg du bør utdype litt. Session kan ikke endres eksternt av brukeren. Man kan endre IDen man har fått utgitt, men det vil bare medføre at man enten ikke har noen data lagret på serveren, eller «overtar» en annen brukes session. Så lenge man lagrere IP og browser i session vil man lett kunne luke ut det siste, og man står da igjen med ingen ekstern mulighet til å endre på dataene som ligger lagret.

 

På en delt servere kan man dog internt risikere at enhver person med tilgang til serveren kan redigere session, men det samme vil fort også ramme en database-basert løsning siden man like enkelt kan lese brukernavn og passordet til databasen ...

Lenke til kommentar

@ Ernie

Det jeg mener er at selve session cookien kan endres av brukeren. Alt som står i $_SESSION array'en kan endres. Rett og slett fordi det er en cookie som kun lagres lokalt hos brukeren.

For eksempel kan session cookien inneholde PHPSESSID=91f66875a0411468cdeb49c68d090d65.

Hvis den kun inneholder dette, kan man sjekke opp mot en database om brukeren er den han gir seg ut for å være. Ved at ip, browser og lignende er lagret i databasen og identifiserer den unike session cookien.

 

Hvis kun session cookien inneholder ip, bruker og browser så kan man lett endre dette og gi seg ut for å være innlogget som en eller annen bruker.

 

Hvis session cookien kun har unik id som den tidligere i inlegget mitt, så må man gjette ganske mye for å treffe en annen unik id som hører til en bruker som fortsatt er innlogget.

Lenke til kommentar

Er du sikker på dette? Har prøvd å google på dette og det ser ikke ut som det er mer enn session id som blir lagret i cookie. Resten blir lagret på serveren og kan ikke endres av browseren, slik det burde være.

Lenke til kommentar

@ Ernie

Det jeg mener er at selve session cookien kan endres av brukeren. Alt som står i $_SESSION array'en kan endres. Rett og slett fordi det er en cookie som kun lagres lokalt hos brukeren.

For eksempel kan session cookien inneholde PHPSESSID=91f66875a0411468cdeb49c68d090d65.

Hvis den kun inneholder dette, kan man sjekke opp mot en database om brukeren er den han gir seg ut for å være. Ved at ip, browser og lignende er lagret i databasen og identifiserer den unike session cookien.

 

Hvis kun session cookien inneholder ip, bruker og browser så kan man lett endre dette og gi seg ut for å være innlogget som en eller annen bruker.

 

Hvis session cookien kun har unik id som den tidligere i inlegget mitt, så må man gjette ganske mye for å treffe en annen unik id som hører til en bruker som fortsatt er innlogget.

Her tar du nok helt feil. Det eneste som lagres hos brukeren er en referanse, PHPSESSID, til et lagringssted på serveren (normalt sett en fil på serveren).
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...