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