Avatar billede simseboii Nybegynder
30. april 2006 - 12:22 Der er 12 kommentarer

Session forsvinder

Hej.
Jeg har lavet et community, men er stødt ind i et problem.
Brugernes loginoplysninger gemmes i sessions, men pludselig forsvinder sessione det kan være efter fem minutter, ti minutter, tyve minutter det er meget forskelligt.

Jeg har prøvet ALT! Jeg begynder at tro det er mit webhotel, Surftown den er gal med.

Bare sig hvis i skal se noget kode.

På forhånd tak.
- Simon
Avatar billede tjanum Nybegynder
01. maj 2006 - 00:35 #1
Hej Simon,

Der kan være flere forklaringer. Den mest nærliggende er, at du på en eller flere sider har glemt at tilføje session_start(). Desuden skal sessionen jo dø efter en time-out periode. Det er somregel sat til mellem 10 og 15 minutter - det er sat af Surftowns indstillinger. Er der ikke et mønster i, hvor lang tid der går? Hvis du giver et link, kunne jeg evt. prøve det selv.

\ Thomas
Avatar billede simseboii Nybegynder
01. maj 2006 - 06:46 #2
Jeg mener selv at jeg har session_start(); på ALLE sider.
Ja, jeg mener at Surftown har sat det til 24 minutter og så forsvinder sessionen, mend et er meget tilfældigt hvornår den forsvinder.

Du kan prøve her:
www.habbo-n3ws.dk

Det er som sagt meget forskelleigt hvornår den forsvinder. Nogle gange går der fem minutter, ti minutter, tyve minutter eller oppe mod en time, andre gange er man knapt logget ind.
Avatar billede tjanum Nybegynder
01. maj 2006 - 11:53 #3
OK - jeg tror på, at det er tilfældigt, hvor længe du kan holde sessionen, men det jeg har testet, har den holdt ca. 10-12 minutter. Jeg kan se, at du har stillet spørgsmålet på udvikleren også, og af koden du har postet der, kan jeg se, at du forsøger at sætte nogle værdier til systemvariable. Jeg tror ikke, at din session.timeout ændrer noget. Prøv lige at tjekke det ved at se, hvad funktionen returnerer. Hvis den returnerer 'false' (eller ingenting), bliver den ikke sat. Dernæst ville jeg altid vælge at have session_start() ALLER først på alle sider.

Prøv evt. at give din session et navn og debug dig frem til, hvad dine konstanter og variable er hvert minut (i et nyt vindue). Det vil muligvis kunne give dig en bedre idé om, hvad det er, der foregår.

En anden ting jeg ikke kan lade være med at nævne er, at du leder til sider med meta refresh, og det er nok ikke den smarteste måde at gøre det på. Hvis en bruger har slået meta refresh fra i sin browser, kan vedkommende jo ikke bruge din side, og det er faktisk ikke frygteligt unormalt. Hvad med at bruger PHP-funktionen header("Location:http://[....]".$_GET['side']); ??....men det er selvfølgelig en helt anden ting :-)
Avatar billede simseboii Nybegynder
01. maj 2006 - 14:11 #4
Koden fra Udvikleren.dk er gammel, jeg har prøvet meget siden.
Lige nu ser min kode sådan ud:
<?
ini_set('gc_probability', '0');
session_start();
if (session_is_registered("brugernavn") AND ("kode")) {
$sessionconnect = mysql_query("SELECT * FROM habbo_brugere WHERE brugernavn = '$_SESSION[brugernavn]'") or die(mysql_error());
$session = mysql_fetch_array($sessionconnect);
if ($session[status] == "-1") {
echo "<center>Din bruger er lukket. Hvis du mener dette er en fejl bør du kontakte et crew medlem på Habbo Hotel</center>";
} else {
}
} else {
echo "Du er ikke logget ind!";
}
?>

Ja, det er jo en helt anden ting. Det kan jeg altid rette, men siden er jo ikke meget ved med denne fejl.
Avatar billede tjanum Nybegynder
01. maj 2006 - 16:10 #5
Umiddelbart er der ikke nogen fejl i din kode, der kan have nogen indflydelse på sessionen (men du laver en if på ("kode") og det vil altid være sandt).

Prøv lige at tjekke, om session.save_handler er sat til 'files'. Tjek også at du ikke bruger session_destroy, session_unset, session_unregister eller lignende nogle utilsigtede steder, samt at din logud-funktioner ikke bliver kørt ved en fejl.

En anden ting kunne være, at de cookies du gemmer, har indflydelse på dine sessions-variable.

En sidste ting jeg ville prøve, var at forsøge at komme til at kigge i sessions-filen (det er dog langt fra sikkert, du kan komme til det).
Avatar billede simseboii Nybegynder
01. maj 2006 - 16:19 #6
Pyyhh.. Du ved for meget til jeg kan følge med! :)

Min eneste session_destory(); ligger så $_GET[mode] skal have værdien logaf.

Hvordan kan mine cookies have indflydeslse på mine sessions?

Hvor finder jeg dem fil? :/
Avatar billede tjanum Nybegynder
01. maj 2006 - 16:44 #7
Dine cookies har formentligt ikke indflydelse på din session, men hvis du roder med dine cookies og kommer til at give en cookie samme navn som sessions-id'et, kan der godt opstå problemer. Jeg tror dog ikke, det er det, der er problemet.

Vent lige med det der med at forsøge at kigge i sessions-filen, for jeg kom lige til at se, at du har webhotel ved Surftown (havde lige glemt dette), så jeg tror alligevel ikke, du kan komme til at kigge dem. Desuden var der lige en ting, der slog mig....problemet kan godt komme af dine meta refresh. Hvis der skrives til sessionen når der sendes videre, mister du sandsynligvis sessionsdata. Hvis du skal prøve at løse det problem på den letteste måde med tanke på, hvordan du nu engang har struktureret hele dit site, vil jeg anbefale dig at starte med at prøve med at skrive:
session_write_close()
...lige inden din meta refresh. Prøv lige at se, om det ikke løser dit problem.
Avatar billede simseboii Nybegynder
01. maj 2006 - 17:26 #8
Jeg har lige lagt det før refresh på alle sider dog ikke hvor session_destory(); står lige inden refresh. F.eks. når man blvier logget ud så laver den session_destroy(); og så refresh.
Avatar billede simseboii Nybegynder
01. maj 2006 - 17:47 #9
Det virker stadig ikke.
Avatar billede tjanum Nybegynder
01. maj 2006 - 18:22 #10
Ærgerligt. Jeg ved ikke helt, hvad jeg skal foreslå. Umiddelbart tror jeg stadig, at det er et problem med din struktur. Du placerer dine ting lidt underligt/forkert. Eksempelvis får jeg en javascript-fejl på noget javascript, du har smidt i toppen af dine sider - før <html>.... Det "må" man ikke, og jeg kan se, at det pågældende script giver fejl, netop fordi det er placeret der. Det drejer sig om det sted, hvor du indsætter minutter tilbage (tid), og før du har udskrevet HTML'en på siden, kan du ikke med javascript referere til det. Benytter du ikke tidstælleren til at lave en popup, der efter 15 min. fortæller, at man er logget af pga. timeout? Og hvad gør du, når tiden er gået? Kalder du logout-funktionen manuelt eller hvordan? Min tanke er, at hvis der er fejl i et javascript, der skal tælle ned til en timeout, kan det måske have noget med javascriptet at gøre, hvis brugeren faktisk blilver logget ud (og sessionen forsvinder).
Avatar billede simseboii Nybegynder
01. maj 2006 - 18:32 #11
Jeg tror ikke det er noget med JavaScriptet at gøre. Jeg har lige flyttet det.
Måden jeg smider brugerne ud på når tiden er gået er sådan:
window.location = "http://www.habbo-n3ws.dk/index.php?side=nyheder&mode=logaf"
Avatar billede tjanum Nybegynder
02. maj 2006 - 00:04 #12
Det kan sagtens være, det ikke har noget med javascriptet at gøre. Der er to ting, jeg vil foreslå dig at gøre. Den ene er at sætte error_reporting til E_ALL for at tjekke, om der bliver smidt nogle warnings ud. Læg især mærke til, om der kommer nogle "Header information already sent" eller lignende. Endvidere ville jeg nok logge de warnings, notices og errors der er.

Den anden ting jeg ville gøre, var at sætte to sider op, der benytter sessions og med javascript skifte mellem de to sider med et stigende interval indtil sessionen dør...og evt. gøre det 100 gange for at se, om den opfører sig ens hver gang. Jeg ville også lave siderne så simple som muligt. Hvis du kan sætte det op (automatisér processen) og det ser ud somom, sessionen holdes lige længe alle de gange, du kører det, kan du nok regne med, at der er et eller andet i dit script, der forårsager at sessionen dør. Ellers ville jeg muligvis kontakte Surftown og spørge dem, om de tømmer sessions-filer på fastlagte minuttal hver time. Det har jeg hørt om på et tysk webhotel. Det er yderst tåbeligt, men man ved aldrig, hvad de kan finde på i deres forsøg på at holde resource-forbruget nede.

Ellers er jeg ved at rende lidt tør for idéer til, hvad du kan foretage dig, og det er lidt svært at hjælpe mere uden at se hele din kode på alle dine sider.....og det er jo lidt voldsomt at poste her :-)
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