webForumDet fria alternativet

Kakor som inte dör

4 svar · 219 visningar · startad av Chavez

ChavezMedlem sedan maj 20001 953 inlägg
#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!

------------------
<A HREF="mailto:chavez@post.netlink.se">Mvh Chavez
</A> UIN: 73975020

Sveriges PHP-portal nr 1!

[Redigerat av Chavez den 27 dec 2001]

HansenMedlem 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

------------------
Hansen
c.h@ngmedia.com

ChavezMedlem 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?

------------------
<A HREF="mailto:chavez@post.netlink.se">Mvh Chavez
</A> UIN: 73975020

Sveriges PHP-portal nr 1!

SPiNMedlem 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å. :)

------------------
SPiN, bjorne.w@telia.com

-- En ask vet jag stånda - den Yggdrasil heter, ett väldigt träd överöst av vita sanden. --

ChavezMedlem 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.

------------------
<A HREF="mailto:chavez@post.netlink.se">Mvh Chavez
</A> UIN: 73975020

Sveriges PHP-portal nr 1!

132 ms totalt · 3 externa anrop · v20260731065814-full.cf67ef55
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)