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

  • Автор темы Автор темы Nicca
  • Дата начала Дата начала

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);
 
а для продолжения привязывать корзину не к юзеру, а к браузеру
 
что у зареганного и незареганного пользователя должна быть одна корзина
 
что у зареганного и незареганного пользователя должна быть одна корзина
Все равно не понимаю..
Выбрал зареганный пользователь какой-то товар, потом разлогинился, заходит под "гостем" и видна его корзина..?
Первое что приходит на голову - куки. Но не все в браузерах их поддерживают..
Как-то слишком закручено получается..
 
да и, тебе точно необходимо хранить корзину в базе? ты хочешь сохранять историю заказов или что-то в этом роде? или тебе надо, чтобы корзина жила долго и счастливо?
 
отом разлогинился, заходит под "гостем" и видна его корзина..?
ну добавь, если так уж хочется, к корзине опциональный параметр юзерид, который если не совпадает, то корзина не показывается.
Первое что приходит на голову - куки.
при чем здесь куки если у тебя и так есть сессия?
 
Я это уже читал.
Кто-нибудь здесь может объяснить хотя бы алгоритм работы такого скрипта?

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

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

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

-~{}~ 06.10.08 23:45:

Автор оригинала: tardis
да и, тебе точно необходимо хранить корзину в базе? ты хочешь сохранять историю заказов или что-то в этом роде? или тебе надо, чтобы корзина жила долго и счастливо?
протсо на сайте реализована регистрация юзера и как-то нелогично будет ему постоянно обнулять корзину при новом входе (если все делать просто на сессиях).
А как на других сайтах сделано? Просто я никогда не пользовался електронными магазинами..
 
плохо читал
для гостя пишешь товары в $_SESSION['basket'],
при логине перезаписываешь $_SESSION['basket'] товарами из корзины в базе, что уж проще
 
Согласен, нельзя..
Всем спасибо. Сделаю так как велел tardis
 
только логичнее не обнулять юзеру его корзину после логина, а то подумает он ненароком "вот м..., я зарегистрировался, залогинился, а они... да как они могли с моей корзиночкой такое сотворить" и уйдет от тебя к конкурентам

-~{}~ 07.10.08 00:02:

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