Under kategorin "själv är bäste dräng" har jag nu stött på följande problem.
Håller på att utveckla ett administrationssystem och där ingår naturligtvis en inloggningsfunktion.
Ett önskemål från användare (och ledning) är att man efter en vis tid blir utloggad. Användaren skall själv få välja hur lång tid han får vara inloggad innan utloggning sker.
För ändamålet har jag byggt en funktion som heter check_login($page, $username, $password)
Som synes tar funktionen ett användarnamn och ett lösenord samt en sida = en funktion som användaren försöker nå....
Utan att bli för deltajerad utför funktionen att antal tester för att se huruvida användaren är behörig i systemet alls, behörig att se på sidan han frågar efter och om tiden är rätt...
Tiden är rätt beräknas på följande sätt:
När användaren loggar in i systemet hämtas en massa info om användaren. Dessa lagras i en array som kallas $user. Ett fält i arrayen heter ttl och anger hur länge personen önskar hållas inloggad innan utloggning sker. Till arrayen läggs vid inloggning ett fält till som heter timestamp och är av typen unixtimestamp.
alltså:
ttl = önskad inloggningstid (ex 28800 = 8 timmar)
timestamp = unix timestamp sätts till NU (nytt unixtimestamp) vid inloggning
Om en användare anropar check_login så kollas om NU > timestamp + ttl.
Om så är fallet loggas användaren ut direkt. Om inte så uppdateras $user['timestamp'] och allt börjar om....
Men nu är det så att användare i systemet blir utloggade efter, vad som ses som, men troligtvis inte är, godtycklig tid. Min misstanke var att det finns något annat som timar ut sessionen innan min funktion gör det.
Förmodligen är det detta: http://se.php.net/manual/en/ref.session.php
och då främst "session.gc_maxlifetime "1440""
Vilket passar min teori bra då 1440 = 24 minuter. Om någon då sätter värden högre än 24 min kommer PHP att kasta sessionen före min funktion timar ut den...
Men nu är det så att jag har testat att sätta 28800 = 8 timmar som värde på parametern i php.ini och därefter startat om apache men det har inte hjälpt....
Nu kommer jag säkert få mååånga käcka svar som visar hur jag på andra vis kan manipulera med dessa värden genom php kod men det är jag inte så intresserad av. Jag vill få min funktion att fungera då den är en så central del i ett, numera, mycket stort projekt (ca 350 filer stort...).
Så? Någon som har några bra idéer? Vad kan tima ut innan min funktion för det???
Redigering:
Tillägas bör att funktionen har testats på ett flertal inloggad personer med olika ttl satta till en hyfsat kort tid (5 - 15 min) och då fungerar funktionen mycket bra vilket talar för att den fungerar på det sättet den är tänkt och att det är något annat som strular till det...