Помогите построить структуру корзины на сессиях

Nicca

Новичок
Помогите построить структуру корзины на сессиях

Есть пользователи сайта: гости и зарегистрированные

При заходе на сайт используется следующая проверка:
PHP:
//
if($page_protect->access()==true)
{
	$US=$_SESSION['uslogin'];
        $smarty->assign("login", $_SESSION['uslogin']);
	$smarty->assign("US", $_SESSION['uslogin']);
}
else
{
	$US=$_SESSION['nologin'];
	$smarty->assign("nologin", $_SESSION['nologin']);
	$smarty->assign("US", $_SESSION['nologin']);
}

//Функция access()
function access() {
   if( $this->login_reader())	//Эта функция видит что есть кука и присаевает $_SESSION['uslogin']=$this->email;
       {
		return true;
	}		
   if(isset($_SESSION['uslogin']))  //Залогинен обычным методом без кук. Переменная $_SESSION['uslogin'] определена
	{
	    return true;
	}		
    else           //  Пришел гость. Регистрируем сес.переменную под гостя.
	{
		session_register("nologin");
		$_SESSION['nologin']='gest';
		return false;
	}
}

// Функция выхода из системы
function log_out() {
  setcookie ($this->cookie_name, "", time()-25*14*360000, '/');
session_unregister("name");
session_destroy();	
header("Location: [url]http://www.site.com/[/url]");
		
	}
Проблема в следующем.
Захожу под гостем. Выбираю 10 позиций товара в корзину. Потом логинюсь в ситему. В корзине показывает 0 позиций(правильно). Выбираю 5 позиций. Все нормально. Теперь разлогиниваюсь - пишет 10 (те что были до входа в систему)
Как в моем случае сделать чтобы после выхода из системы стартовала новая "гостевая" сессия и елементов в корзине было 0

PHP:
//Выборка количетсва елементов из корзины идет после блока if($page_protect->access()==true) на каждой странице
$sql="select * from korzina where us_id='".$US."'";
$res=db_select($sql);
$n=mysql_num_rows($res);
$smarty->assign("n", $n);
 

Фанат

oncle terrible
Команда форума
а для продолжения привязывать корзину не к юзеру, а к браузеру
 

tardis

lazy
что у зареганного и незареганного пользователя должна быть одна корзина
 

Nicca

Новичок
что у зареганного и незареганного пользователя должна быть одна корзина
Все равно не понимаю..
Выбрал зареганный пользователь какой-то товар, потом разлогинился, заходит под "гостем" и видна его корзина..?
Первое что приходит на голову - куки. Но не все в браузерах их поддерживают..
Как-то слишком закручено получается..
 

tardis

lazy
да и, тебе точно необходимо хранить корзину в базе? ты хочешь сохранять историю заказов или что-то в этом роде? или тебе надо, чтобы корзина жила долго и счастливо?
 

Фанат

oncle terrible
Команда форума
отом разлогинился, заходит под "гостем" и видна его корзина..?
ну добавь, если так уж хочется, к корзине опциональный параметр юзерид, который если не совпадает, то корзина не показывается.
Первое что приходит на голову - куки.
при чем здесь куки если у тебя и так есть сессия?
 

Nicca

Новичок
Я это уже читал.
Кто-нибудь здесь может объяснить хотя бы алгоритм работы такого скрипта?

Более-менее представляю для гостя:

Заходит гость на сайт. Проверяем установлена ли кука. Если да, смотрим к-во елементов из корзины и юзаем их.
Если нет - стартуем сессию и все пишем в сессии.
Если браузер закрылся - данные вытерлись.

Как быть для 2 варианта о котором я описывал выше? Как сохранить для зареганного пользователя данные, а для незареганного обнулить?

-~{}~ 06.10.08 23:45:

Автор оригинала: tardis
да и, тебе точно необходимо хранить корзину в базе? ты хочешь сохранять историю заказов или что-то в этом роде? или тебе надо, чтобы корзина жила долго и счастливо?
протсо на сайте реализована регистрация юзера и как-то нелогично будет ему постоянно обнулять корзину при новом входе (если все делать просто на сессиях).
А как на других сайтах сделано? Просто я никогда не пользовался електронными магазинами..
 

tardis

lazy
плохо читал
для гостя пишешь товары в $_SESSION['basket'],
при логине перезаписываешь $_SESSION['basket'] товарами из корзины в базе, что уж проще
 

Фанат

oncle terrible
Команда форума
нельзя построить то, что сам никогда не видел.
 

Nicca

Новичок
Согласен, нельзя..
Всем спасибо. Сделаю так как велел tardis
 

tardis

lazy
только логичнее не обнулять юзеру его корзину после логина, а то подумает он ненароком "вот м..., я зарегистрировался, залогинился, а они... да как они могли с моей корзиночкой такое сотворить" и уйдет от тебя к конкурентам

-~{}~ 07.10.08 00:02:

Автор оригинала: Nicca
Сделаю так как велел tardis
Я никому ничего не велел, все вышенаписанное является моим имхо и подлежит употреблению лишь с соблюдением всех необходимых мер предосторожности.
 
Сверху