【发布时间】:2016-01-22 15:59:11
【问题描述】:
作为尝试捕获同一用户的多个帐户的一部分,我们在用户登录时放置了一个 cookie。在登录期间,首先我们尝试读取以前的 cookie 并将其替换为新的。读取和写入的 cookie 存储在数据库中。在不删除 cookie 的情况下,该系统可以成为识别多帐户的一部分。
使用递归函数搜索多帐户时,内存不足。当不用作递归时,它可以工作,但有时一个用户有很多帐户,我们只能通过对所有找到的帐户重复此功能来找到它们。 重复此功能最多3次时有效,但可以肯定的是,此功能必须运行,直到找不到多帐户。
function xtest_getOtherNicks($dbh,$nick){
/**
Find all duplicate accounts, based on cookie
*/
$aOtherNicks = array();
$aCookies = db\ct_getCookies($dbh,$nick);
foreach($aCookies as $k => $aCookie){
$aFoundNicks = db\ct_getNick($dbh,$aCookies[$k]['cookiewaarde']);
if(count($aFoundNicks) > 0){
foreach($aFoundNicks as $key => $aFoundNick){
if(!in_array($aFoundNick['nick'],$aOtherNicks)){
$aOtherNicks[] = $aFoundNick['nick'];
//Recursive part
//$aMoreFoundNicks = xtest_getOtherNicks($dbh,$aFoundNick['nick']);
/**
if(count($aMoreFoundNicks)>0){
foreach($aMoreFoundNicks as $key => $aMoreFoundNick){
if(!in_array($aMoreFoundNick['nick'],$aOtherNicks)){
$aOtherNicks[] = $aMoreFoundNick['nick'];
}
}
} */
}
}
}
}
return $aOtherNicks;
}
我已经搜索过其他递归问题,但它们与我的不同。也许可以更改 SQL 并让数据库完成这项工作,但我对此一无所知。
表:
CREATE TABLE IF NOT EXISTS `cookietest` (
`cookiewaarde` varchar(100) NOT NULL,
`nick` varchar(100) NOT NULL,
`datum` datetime NOT NULL,
`rw` enum('r','w') NOT NULL,
KEY `cookiewaarde` (`cookiewaarde`),
KEY `nick` (`nick`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
cookie 查询:
$q = "SELECT
cookiewaarde
FROM
cookietest
WHERE
nick = '".sanitize($nick)."'";// will be converted to PDO
【问题讨论】: