CassadyMedlem sedan aug. 20051 393 inlägg
Hur fungerar sessions? Kan någon ge mig en enkel förklaring och kanske lite kod.
Ponera att jag vill att folk skall kunna logga in på min sajt.
1- Dom anger användarnamn och lösenord.
2- En session skapas.
3- Flera personer kan vara inloggade samtidigt.
4- Stängs webläsaren skall sessionen dödas.
5- Sessionen skall kunna dödas genom att användaren "loggar ut".
6- Om sida är inaktiv en viss tid så dödas sessionen.
Är detta komplicerat i PHP?
MatteMedlem sedan aug. 20002 970 inlägg
Cassady skrev:
Är detta komplicerat i PHP?
Nej, det är enkelt.
Dessutom punkt 4 och 6 automatiskt, så det behöver du inte ens beymra dig om.
CassadyMedlem sedan aug. 20051 393 inlägg
Den här vart ju bra
Dags att börja pilla :e
RogerAMedlem sedan sep. 200547 inlägg
Kom ihåg att använda session_start() på varje sida som sessionen ska gälla på. Jag trodde man bara behövde använda session_start en gång och att sessionen efter det var igång tills den förstördes. Detta resulterade i en del svordommar innan jag till slut insåg ovanstående. :)
CassadyMedlem sedan aug. 20051 393 inlägg
RogerA skrev:
Kom ihåg att använda session_start() på varje sida som sessionen ska gälla på. Jag trodde man bara behövde använda session_start en gång och att sessionen efter det var igång tills den förstördes. Detta resulterade i en del svordommar innan jag till slut insåg ovanstående. :)
Skall ha det i åtanke... har börjat pilla lite men jag kan inte förstå hur jag kollar om en session är initierad. Borde vara enkelt enligt php.net men det funkar inte för mig. Dessutom fattar jag inte ritkigt det här med att använda cookies / inte använda cookies. Kan någon ge mig en kod-rad som kollar om en session är startad. Och kanske kan någon ge mig en kort förklaring om cookies/inte cookies?
RogerAMedlem sedan sep. 200547 inlägg
<?php
session_start();
if (isset($_SESSION))
print 'Sessionen är startad med ID: ' . session_id();
?>
Har du en lokal server kan du dessutom kika på de filer som hör till varje session. Vart sessionsfilerna sparas bestäms av din php.ini fil.
Cookies kan t.ex. användas för att användare ska slippa logga in varje gång de besöker din sida.
CassadyMedlem sedan aug. 20051 393 inlägg
Såg ett liknande exempel på php.net men vad jag inte riktigt förstår är:
1- Om jag kör session_start(); först på varje sida som skall ingå i sessionen, kommer då inte en ny session startas så fort den raden körs?
2- if (isset($_SESSION)) <-- förstår inte variabeln $_SESSION. Borde inte det vilkoret uppfyllas automatiskt om jag kör session_start(); innan?
RogerAMedlem sedan sep. 200547 inlägg
1. Nej så är det inte och det var precis så jag med trodde det funkade. :)
2. Jo men du frågade efter ett sätt att kolla att en session har skapats. Tar du bort session_start() i kodsnutten jag gav så kommer du märka att ingen session är skapad.
CassadyMedlem sedan aug. 20051 393 inlägg
RogerA skrev:
2. Jo men du frågade efter ett sätt att kolla att en session har skapats. Tar du bort session_start() i kodsnutten jag gav så kommer du märka att ingen session är skapad.
Ok. Men om vi ser det så här. Jag startar en session på sidan a.php. Sen länkar jag till b.php. Där vill jag kolla om sessionen jag startade på a.php är aktiv. Har jag då session_start() högst upp kommer ju vilkoret uppfyllas oavsett om sessionen är initierad på a.php eller genom session_start() på b.php?
Eller är jag ute och cyklar i vanlig ordning? :r
MatteMedlem sedan aug. 20002 970 inlägg
1. Du postar inloggningsformuläret till ett skript
2. I skriptet kollas om användarnamn/lösenord är rätt
3. Om inte ladda om inloggningsformuläret
4. Annars sätt en sessionsvariabel, typ $_SESSION['loggedin']
När du har inloggningskontroll gör du en koll av om sessionsvariabeln $_SESSION['loggedin'] existerar (sattes vid godkänd inloggning), annars skicka till login.
Koll av om sessionsvariabeln existerar gör du enklast med isset().
Själv brukar jag oftast hämta id från användartabellen, och lägga i min sessionsvariabel. Denna kan då enkelt användas för att identifiera användaren i olika skript.
CassadyMedlem sedan aug. 20051 393 inlägg
Matte skrev:
1. Du postar inloggningsformuläret till ett skript
2. I skriptet kollas om användarnamn/lösenord är rätt
3. Om inte ladda om inloggningsformuläret
4. Annars sätt en sessionsvariabel, typ $_SESSION['loggedin']
När du har inloggningskontroll gör du en koll av om sessionsvariabeln $_SESSION['loggedin'] existerar (sattes vid godkänd inloggning), annars skicka till login.
Koll av om sessionsvariabeln existerar gör du enklast med isset().
Själv brukar jag oftast hämta id från användartabellen, och lägga i min sessionsvariabel. Denna kan då enkelt användas för att identifiera användaren i olika skript.
if isset($_SESSION['loggedin']) kollar alltså om användaren är inloggad?
$_SESSION['loggedin'] innehåller användarID?
Har jag förstått det rätt då?
Och sen skapar jag fler sessionsvariabler med $_SESSION['en_annan_variabel'] etc?
MatteMedlem sedan aug. 20002 970 inlägg
Om jag förstår dig rätt, att du förstår mig rätt, så ska det fungera så :)
Om det är några som helst tveksamheter så måste du ha session_start() överst på varje sida du vill använda en sessionsvariabel.
session_start() hämtar från sessionsfilen, och lägger i arrayen $_SESSION.
Finns ingen sessionsfil så skapas en sådan.
Vilken sessionsfil som ska öppnas avgörs av en cookie hos klienten, saknas sådan skapas ny session.
CassadyMedlem sedan aug. 20051 393 inlägg
Matte skrev:
Om jag förstår dig rätt, att du förstår mig rätt, så ska det fungera så :)
Om det är några som helst tveksamheter så måste du ha session_start() överst på varje sida du vill använda en sessionsvariabel.
session_start() hämtar från sessionsfilen, och lägger i arrayen $_SESSION.
Finns ingen sessionsfil så skapas en sådan.
Vilken sessionsfil som ska öppnas avgörs av en cookie hos klienten, saknas sådan skapas ny session.
Verkar som jag förstått dig rätt. Det jag vill göra med sessions fungerar nu så. Dock är jag inte helt på det klara med det här med cookies/inte cookies. Ovanstående förutsätter ju att användaren tillåter cookies. Men sessions går väl att köra cookiefritt också väl?
MatteMedlem sedan aug. 20002 970 inlägg
Det rekommenderas idag är att sessionsid endast ska föras vidare genom cookies, detta av säkerhetsskäl.
Är inte session.use_only_cookies satt på servern kan du också skicka sessionsid mellan sidorna via URL-en.
Är session.use_trans_sid satt på servern läggs, när cookie saknas, sessionsid på länkar m.m. utav servern. Vilka HTML-element detta gäller hittar du i url_rewriter.tags i din php.ini, eller phpinfo().
För andra saker som javascript-redirect eller headers måste du lägga till sessionsid manuellt. Detta gör du med konstanten SID, typ
header("Location: sida.php?".SID);
Vill du köra helt cookie-fritt blir det nog till att använda HTTP-inloggning, men då går det inte att logga ut, med mindre än att man stänger ner webbläsaren helt.
CassadyMedlem sedan aug. 20051 393 inlägg
Då har jag en annan fråga.
Vi tänker oss följande:
Jag initierar en session på sidan a.php. På a.php länkar jag till b.php där jag inte har någon session_start(). från b.php länkar jag vidare till c.php där jag vill att sessionen skall gälla. Fungerar detta då eller måste jag köra session_start() start på alla sidor i "kedjan" för att sessionsbariablerna skall vara tillgängliga på c.php?
RogerAMedlem sedan sep. 200547 inlägg
Sessionen finns levande ända till du stänger din browser så den försvinner inte på b.php. Detta kan du enkelt testa själv.
MatteMedlem sedan aug. 20002 970 inlägg
Om det ska fungera även när cookies inte är tillåtet, då måste du ha med session_start() på ALLA sidor i kedjan.
Dessutom måste du lagt på sessionsid, antingen automatiskt med *session.use_trans_sid[/man] eller manuellt med *SID[/man].
Är cookies tillåtet är det inga som helst problem, då kan du hoppa som du vill mellan sidor med eller uten session_start() eller på andra domäner.
webForum är t.ex. uppbyggt med sessioner. Vet inte hur det skulle fungera här med cookies avslaget för användaren. Det beror på inställningar och kodning på sidan.**