Ответ 1
Сегмент ASP.NET соответствует сеансу браузера - он не зависит от того, аутентифицирован ли пользователь (входит в систему) или нет. Поэтому у вас не должно быть никаких проблем в отношении гостевых/членских сессий. Я бы посоветовал вам разоблачить текущую корзину покупок через статическое свойство accessor - например
Class ShoppingCart {
public static ShoppingCart Current
{
get
{
var cart = HttpContext.Current.Session["Cart"] as ShoppingCart;
if (null == cart)
{
cart = new ShoppingCart();
HttpContext.Current.Session["Cart"] = cart;
}
return cart;
}
}
... // rest of the code
}
Несколько вещей, которые нужно рассмотреть здесь:
- Всякий раз, когда веб-приложение или веб-сервер перерабатываются/перезапускаются, ваши сеансы в процессе работы теряются. Это означает, что вам нужно сохранить свою сессию в базе данных в соответствующей точке.
- Вы можете использовать хранилище сеансов процессов (база данных или другой сервер) - в этом случае вы должны пометить свой класс корзины покупок как сериализуемый. Стоимость выполнения внепроцессных сеансов. Таким образом, вы уже храните сеанс в базе данных, поэтому IMO, вы должны использовать in-proc сессии, чтобы как можно скорее написать грязные сессии в базу данных.