I think I have the solution to delete the gifts when a session ends:
includes/functions/sessions.php
Line 162 in function zen_session_recreate()
replace:
global $http_domain, $https_domain, $current_domain;
with:
global $http_domain, $https_domain, $current_domain, $db;
$db->Execute("DELETE from " . TABLE_CUSTOMERS_BASKET . " WHERE products_id = 96 OR products_id = 97 OR products_id = 98");
Replace 96, 97, 98 with your actual product ids for your free gifts.
This removes the gifts when the customer times out, or when the customer logs off. If the gifts are not deleted, it's possible to select two free gifts when a visitors cart is merged with a customers cart.