simplify parse_sessions() and write_new_session()

This commit is contained in:
Daniel Winzen
2016-04-28 09:35:22 +02:00
parent a37026ca64
commit 8538b22f6a

View File

@ -2000,11 +2000,10 @@ function create_session($setup){
function write_new_session(){
global $I, $P, $U, $db;
$lines=parse_sessions();
$sids; $reentry=false;
foreach($lines as $temp){
$sids[$temp['session']]=true;// collect all existing ids
if($temp['nickname']===$U['nickname']){// nick already here?
parse_sessions();
$stmt=$db->prepare('SELECT * FROM ' . PREFIX . 'sessions WHERE nickname=?;');
$stmt->execute(array($U['nickname']));
if($temp=$stmt->fetch(PDO::FETCH_ASSOC)){
if($U['passhash']===$temp['passhash']){
$U=$temp;
if($U['status']==0){
@ -2013,14 +2012,16 @@ function write_new_session(){
}
setcookie(COOKIENAME, $U['session']);
$reentry=true;
break;
}else{
send_error("$I[userloggedin]<br>$I[wrongpass]");
}
}else{
$sids=[];
// create new session
$stmt=$db->query('SELECT session FROM ' . PREFIX . 'sessions;');
while($temp=$stmt->fetch(PDO::FETCH_ASSOC)){
$sids[$temp['session']]=true;// collect all existing ids
}
}
// create new session:
if(!$reentry){
do{
$U['session']=md5(time().mt_rand().$U['nickname']);
}while(isSet($sids[$U['session']]));// check for hash collision
@ -2234,6 +2235,7 @@ function get_nowchatting(){
function parse_sessions(){
global $P, $U, $countmods, $db;
// delete old sessions
$guestexpire=time()-60*get_setting('guestexpire');
$memberexpire=time()-60*get_setting('memberexpire');
$result=$db->prepare('SELECT nickname, status FROM ' . PREFIX . 'sessions WHERE (status<=2 AND lastpost<?) OR (status>2 AND lastpost<?);');
@ -2253,22 +2255,19 @@ function parse_sessions(){
}
$db->exec('DELETE FROM ' . PREFIX . "messages WHERE poster='' AND recipient='' AND poststatus=9;");
}
$result=$db->query('SELECT * FROM ' . PREFIX . 'sessions ORDER BY status DESC, lastpost DESC;');
if(!$lines=$result->fetchAll(PDO::FETCH_ASSOC)){
$lines=array();
}
// look for our session
if(isSet($_REQUEST['session'])){
foreach($lines as $temp){
if($temp['session']===$_REQUEST['session']){
$U=$temp;
break;
}
$stmt=$db->prepare('SELECT * FROM ' . PREFIX . 'sessions WHERE session=?;');
$stmt->execute(array($_REQUEST['session']));
if($tmp=$stmt->fetch(PDO::FETCH_ASSOC)){
$U=$tmp;
}
}
// load other sessions
$countmods=0;
$P=array();
foreach($lines as $temp){
if($temp['entry']!=0 && $temp['status']>0){
$stmt=$db->query('SELECT nickname, style, status, incognito FROM ' . PREFIX . 'sessions WHERE entry!=0 AND status>0 ORDER BY status DESC, lastpost DESC;');
while($temp=$stmt->fetch(PDO::FETCH_ASSOC)){
if(!$temp['incognito']){
$P[$temp['nickname']]=[$temp['nickname'], $temp['style'], $temp['status']];
}
@ -2276,8 +2275,6 @@ function parse_sessions(){
++$countmods;
}
}
}
return $lines;
}
// member handling