Musisz sprawdzac co jakis czas, czy sesja o danym sid jeszcze istnieje (rozumiem, ze masz tam jakis mechanizm sesji - sid w PHP mozna wydobyc) . W bazie, przy koszyku musisz miec zapisany sid. Przejezdzasz po wszystkich koszykach i sprawdzasz dla ktorego sesja wygasla. Jesli wygasla, to wywalasz koszyk. Kod sprawdzajacy wstawiasz na jakiejs stronie, ktora w miare czesto sie wyswietla. Rozwiazanie powinno dzialac, choc od strony "elegancji i wydajnosci" jest generalnie do d***. Nie wiem, czy w PHP da sie przchwycic moment, gdy sesja jest niszczona. W PHP sa w ogole callbacki?
Tu jest jakis tutorial do timeoutow sesji - moze sie przyda, choc nie rozwiazuje problemu i kod jest dlugi i skomplikowany: http://www.phpfreaks.com/tutorials/77/1.php Moze jednak Cie cos natchnie.
Oczywiscie jesli ktos wie jak to porzadnie i elegancko zrobic, to ja tez jestem zainteresowany. Jesli sie nie da, no to mamy kolejny przyklad slabosci PHP do zastosowan "enterprise"...