Sessions skifter ejermand
Kære Eksperter.Jeg har igennem længere tid udviklet på en portal, som selvfølgelig bare virkede på min localhost!
Nu er den derimod blevet uploadet til Surftown servere, og jeg oplever problemer med at brugere pludselig kommer til at "dele" deres sessions. dvs. at "Anders" pludselig ser sig selv logget ind som "Mickey", uden at han reelt har logget ind som "Mickey". Det er jo rent ud sagt noget skidt, eftersom "Anders" nu har mulighed for at redigere i "Mickeys" personlige oplysninger.
Min login kode ser sådan ud:
if($_POST['loginEmail'] && $_POST['loginPass']) {
$user_try_login = $user->user_login($_POST['loginEmail'], md5($_POST['loginPass']), $_POST['loginSave'], $_POST['goBack']);
}
public function user_login($email, $password, $login_save = "", $goBack = "") {
global $root;
$query = mysql_query("SELECT id, password, name, email, name, profileactive FROM users WHERE email = '".strtolower($email)."' AND password = '".strtolower($password)."'") or die(mysql_error());
if(mysql_num_rows($query)) {
$user_query = mysql_fetch_array($query);
$user_update = mysql_query("UPDATE users SET lastloginstamp = '".time()."' WHERE id = '".$user_query['id']."'") or die(mysql_error());
$_SESSION['id'] = (int) $user_query['id'];
$_SESSION['email'] = $user_query['email'];
$_SESSION['name'] = $user_query['name'];
//login was granted, now save cookie if user wanted to
if($login_save OR isset($_COOKIE['userLogin'])) { //if user chosed to save user or login already saved :: renew cookie
setcookie("userLogin", "".$user_query['email']." ".$user_query['password']."", time()+60*60*24*30, "/"); //save for 30 days..
}
if(strstr($goBack,'?leave=true')) { //check if goBack variable contains url uri from previous logout
$goBack = $root;
}
if(!empty($goBack)) { //good login
header("Location: ".$goBack);
exit;
}
} else {
if(!empty($goBack)) { //bad login
header("Location: ".$goBack);
exit;
}
}
}
Min log ud funktion:
public function user_leave() {
if(isset($_COOKIE['userLogin'])) {
setcookie("userLogin", "", time()-60*60*24*30, "/"); //user chose to logout, if session was registered at login :: kill
}
session_destroy();
session_unset();
$_SESSION = array();
}
Samtidig har jeg en funktion der tjekker om man tidligere har gemt en cookie (automatisk login), som også køres på alle sider:
public function login_reader() {
if(isset($_COOKIE['userLogin']) && !$_SESSION['id']) {
$result = explode(" ", $_COOKIE['userLogin']);
$cookieUser = $result[0];
$cookiePass = $result[1];
$user_try_login = $this->user_login($cookieUser, $cookiePass);
}
}
