2015-04-14 2 views
0

Я создаю интернет-магазин, используя Meteor. У меня возникла проблема, когда сессия Метеор получает сброс, когда элемент добавляется в корзину. Пользователь может добавить товар в корзину из двух мест - страницу с описанием основных продуктов и страницей сведений о продукте.Метеоритный сеанс держит перезагрузку в корзине

Сценарий A: Клиент находится на странице основных продуктов и добавляет товар в корзину. Затем клиент нажимает на страницу сведений о продукте для другого товара. Затем клиент добавляет товар в корзину на странице сведений о продуктах. Создается новый сеанс, и элементы, которые были добавлены на странице с листингом продуктов, исчезают, и только продукты со страницы подробностей продукта находятся в корзине.

Так что моя проблема в том, что новая сессия создается, когда элемент будет добавлен в корзину, и я не уверен, почему это происходит ...

Вот событие AddToCart нажмите из моих productDetails.js:

'click .add-to-cart': function (e, tmpl) { 
e.preventDefault(); 

var quantity = $('[name=qty]').val(); 
var thisProduct = Products.findOne(); 
var sessionId = Meteor.default_connection._lastSessionId; 
var productInfo = { 
    productCode: thisProduct.productCode, 
    memPrice: thisProduct.memPrice, 
    brand: thisProduct.brand, 
    size: thisProduct.size, 
    description: thisProduct.description, 
    quantity: quantity, 
    sessionId: sessionId 
}; 
Session.set('sessionId', sessionId); 

console.log(productInfo); 

if (quantity > 0) { 
    Meteor.call('addToCart', quantity, productInfo); 
    Router.go('Tires'); 
} else { 
    alert('Please input a desired quantity'); 
} 

}

Вот мой AddToCart нажмите событие из моей странице мастера продуктов:

'click .add-to-cart': function (e, tmpl) { 
e.preventDefault(); 

var currUser = Meteor.user(); 
if(!currUser) { 
    alert("Please register for an account before you may add items to cart"); 
} else if (!currUser.profile.confirmed) { 
    alert("Your account needs to be confirmed before you may add items to cart. Please contact [email protected] for assistance.") 
} else { 
    var currentRow = $(e.target).closest('tr'); 
    var quantity = currentRow.find('.item-quantity').val(); 
    var sessionId = Meteor.default_connection._lastSessionId; 
    var productInfo = { 
    productCode: this.productCode, 
    memPrice: this.memberPrice, 
    brand: this.brand, 
    size: this.size, 
    description: this.description, 
    quantity: quantity, 
    sessionId: sessionId 
    }; 
    Session.set('sessionId', sessionId); 

    if (quantity > 0) { 
    Meteor.call('addToCart', quantity, productInfo); 
    currentRow.find('.item-quantity').val(0); 
    } else { 
    alert('Please input a desired quantity'); 
    } 
}; 

}

А вот мой метод AddToCart:

addToCart: function(qty, productInfo, cb) { 
    console.log('//-------------Item Data-------------'); 
    console.log("Product Info: ", productInfo); 

    if (qty > 0) { 
     Cart.insert(productInfo); 
    } 
} 

Любые мысли? Заранее спасибо!

ответ

0

Meteor.default_connection._lastSessionId дает идентификатор сеанса websocket «session», он не является постоянным и не позволяет отслеживать сеанс пользователя, как cookie. Вы должны полагаться на учетные записи пользователей и хранить корзину в профиле или использовать другую коллекцию Mongo.

 Смежные вопросы

  • Нет связанных вопросов^_^