php session variable randomly changes -
i have website has membership system. when users log in, validate username/password database , start session, $_session['userid'] contains id (i have not implemented using cookies yet)
i have problem, system works fine of times, users have reported find logged in other random users account. means $_session['userid'] changes without reason else , i'm pretty sure i'm not doing change it.
any ideas why happening ?
edit : summary of doing
this method start session
function startsession($id){ $_session['logged_in'] = 1; $_session['userid'] = $id; }
this method checks login
function isloggedin(){ return isset($_session['logged_in']) && isset($_session['userid']) && $_session['userid']!=" " && $_session['logged_in']==1; }
this logout method
function logout(){ $_session['logged_in'] = 0; $_session['userid'] = 0; unset($_session['logged_in']); unset($_session['userid']); session_destroy(); if (!isloggedin()){ return "s3"; } else { return "e3"; } }
and how check if user logged in places
if (isloggedin()){ $profileid = $_session['userid']; }
this login function, call startsession
function login($username, $password){ $pdo = newpdo(); $username = sanitize_string($username); $password = sha1(sanitize_string($password)); $query = $pdo->prepare("select id ".table_profile." nick=:nick , pass=:pass limit 1"); $query->execute(array(':nick'=>$username, ':pass'=>$password)); $result = $query->fetch(pdo::fetch_assoc); if (count($result['id']) == 1){ startsession($result['id']); loginexecution(); return "s1"; } else{ return "e1"; } }
the problem in login function
your script not checking username , password data, , if username , password empty or incorrect, client gets firs available id database.
function login($username, $password){ $pdo = newpdo(); $username = sanitize_string($username); $password = sanitize_string($password); // check data existing if (empty($username)) throw new exeption('empty username'); if (empty($password)) throw new exeption('empty password'); $password = sha1($password); $query = $pdo->prepare("select id ".table_profile." nick=:nick , pass=:pass limit 1"); $query->execute(array(':nick'=>$username, ':pass'=>$password)); $result = $query->fetch(pdo::fetch_assoc); if (count($result['id']) == 1){ startsession($result['id']); loginexecution(); return "s1"; } else{ return "e1"; } }
p.s. check incoming data, before sql queries
Comments
Post a Comment