Špatná identifikace session – záměna uživatelů
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- visitor
- Člen | 22
NETTE: 0.9.6
Mám košík v e-shopu implementovaný následovně:
public function handlePridejDoKosiku() {
// zjistime si jake ma clovicek ID
$namespace = Environment::getSession('basket');
// pokud v něm neexistuje proměnná user, tak mu nové číslo přidělíme
if (!isset($namespace->user)) {
$namespace->user = dibi::fetchSingle('SELECT MAX(user)+1 FROM [kosik]');
}
$request = Environment::getApplication()->getPresenter()->getRequest();
$arr = $request->getPost();
$arr['user'] = $namespace->user;
dibi::query('DELETE FROM [kosik] WHERE [user]=%i AND [kod_zbozi]=%i LIMIT 1', $arr['user'], $arr['kod_zbozi']);
if ($arr['mnozstvi'] > 0) {
dibi::query('INSERT INTO [kosik]', $arr);
}
}
Když pak třeba hodinu na daném webu nic nedělám a vrátím se (sessiona na serveru již vypršela), tak v košíku mám nějaké zboží. Pokud se podívám do košíku a do databáze, tak to je košík s největším ID ($namespace->user), který založilo jiné IP.
Košík načítám takto:
$namespace = Environment::getSession('basket');
if (!isset($namespace->user)) {
$this->redirect('Default:default');
} else {
$count = dibi::fetchSingle('SELECT COUNT(*) FROM [kosik] WHERE [user]=%i', $namespace->user);
...
Čeho se chytit? Co dělám špatně?