Kakor som inte dör

PHP

4 svar · 222 visningar · startad av Chavez

Medlem sedan maj 20001 953 inlägg
Trådstart#1

Trixar lite med ett inloggningssystem som inte vill fungera. Förenklat fungerar det såhär:

Inloggning

//Man har fyllt i forumläret

$result  = mysql_query("SELECT * from users WHERE username='$HTTP_POST_VARS[username]'") or die (mysql_error()); 
$row = mysql_fetch_array($result); 

if ($HTTP_POST_VARS[password] == $row[password]) {

        //Ta från arrayen och plocka ner det i vanliga variabler
        $userid = $row[id];
        $userlevel = $row[userlevel];
        $username = $row[username];
        $time = time();

        //Sätt session variablerna
        $session_userid = $userid;
        $session_userlevel = $userlevel;
        $session_username = $username;
        $session_last_activity = $time;
        
        //Samma variabler, men för kakorna.
        $livstid = time() + (60*60*24); //Ett dygns livstid
        setcookie("cookie_userid", $userid, $livstid);
        setcookie("cookie_userlevel", $userlevel, $livstid);
        setcookie("cookie_username", $username, $livstid);
        setcookie("cookie_last_activity", $time, $livstid);

        header("Location: index.php");
}

Så långt fungerar allt väl, både sessionvariablerna och kakorna blir satta som de ska. Sedan har jag filen global.php som inkluderas på varje sida i systemet.

global.php

session_register("session_userid");
session_register("session_userlevel");
session_register("session_username");
session_register("session_last_activity");
session_register("session_redir");

if (!$HTTP_SESSION_VARS[session_userid]) {
    //Om man stängt webbläsarfönstret så hämtar vi upp det ur kakorna.
    $session_userid = $cookie_userid;
    $session_userlevel = $cookie_userlevel;
    $session_username = $cookie_username;
    $session_last_activity = $cookie_last_activity;
    
}

Den är till för att man inte skall bli utloggad så fort som man stänger ner webbläsaren. Nya sessions variabler skapas ur kakorna. Nu till delen där det är något lurt, utloggningen:

Utloggning

//Radera ut session variablerna
session_unset();

//Sätt tomma kakor
setcookie("cookie_userid");
unset($cookie_userid);
setcookie("cookie_userlevel");
unset($cookie_userlevel);
setcookie("cookie_username");
unset($cookie_username);
setcookie("cookie_last_activity");
unset($cookie_last_activity);

header("Location: index.php");

Det är som sagt här det strular. Kakorna blir inte nollställda, och jag kan inte förstå varför! Och eftersom inte kakorna "dör" så skapas det ju hela tiden nya sessioner i global.php. Varför dör inte kakorna? Där har ni något att bita i! :)

Psst .. Kan hända att det finns lite "parse errors" i koden ovan. Men den funkar och köra, när jag föenklade den hit kom det nog med lite fel. Men ni fattar sammanhanget iaf.

Tacksam för hjälp!

Medlem sedan aug. 2000374 inlägg
#2

When deleting a cookie you should assure that the expiration date is in the past, to trigger the removal mechanism in your browser.

setcookie ("TestCookie", "", time() - 3600);

http://www.php.net/manual/en/function.setcookie.php

Medlem sedan maj 20001 953 inlägg
#3

Tänka sig, det ser ut som om det fungerar. Men varför fungerar det inte att bara sätta den? Har jag lärt mig och jag har för mig att det visas i de flesta exempel?

Medlem sedan mars 20007 896 inlägg
#4

En fråga bara:

if (!$HTTP_SESSION_VARS[session_userid]) {
//Om man stängt webbläsarfönstret så hämtar vi upp det ur kakorna.
$session_userid = $cookie_userid;
$session_userlevel = $cookie_userlevel;
$session_username = $cookie_username;
$session_last_activity = $cookie_last_activity;

}

Är du säker på att det fungerar? $HTTP_SESSION_VARS ( POST, GET & COOKIE för den delen också ) finns ALLTID, dock finns de utan värden. Alltså borde det kanske se ut:

if ( $HTTP_SESSION_VARS['lala'] == "" )

Så sägs det ivf, men det är ju alltid kul om det funkar ändå. :)

Medlem sedan maj 20001 953 inlägg
#5

Jo, det fungerar. Det fungerar inte om man gör på detta viset:
if ($HTTP_SESSION_VARS) {

Men eftersom jag kör med en specifik variabel: $HTTP_SESSION_VARS[variabeln] så finns den ju inte annat än när jag skapar den.

249 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)