为什么HttpContext比直接访问Session变量更好
本文关键字:Session 变量 更好 访问 HttpContext 为什么 | 更新日期: 2023-09-27 18:10:18
可以看到下面的代码
[HttpPost]
public ActionResult RemoveFromCart(int id)
{
// Remove the item from the cart
var cart = ShoppingCart.GetCart(this.HttpContext);
...
public static ShoppingCart GetCart(HttpContextBase context)
{
var cart = new ShoppingCart();
cart.ShoppingCartId = cart.GetCartId(context);
return cart;
}
// We're using HttpContextBase to allow access to cookies.
public string GetCartId(HttpContextBase context)
{
if (context.Session[CartSessionKey] == null)
{
if (!string.IsNullOrWhiteSpace(context.User.Identity.Name))
{
context.Session[CartSessionKey] = context.User.Identity.Name;
}
else
{
// Generate a new random GUID using System.Guid class
Guid tempCartId = Guid.NewGuid();
// Send tempCartId back to client as a cookie
context.Session[CartSessionKey] = tempCartId.ToString();
}
}
return context.Session[CartSessionKey].ToString();
}
那么为什么我们不能直接使用Session[CartSessionKey]
呢?
[HttpPost]
public ActionResult RemoveFromCart(int id)
{
// Remove the item from the cart
var cart = Session[CartSessionKey].ToString();
没有实质性的区别。Controller
上的Session
属性实现为:
if (this.HttpContext != null)
return this.HttpContext.Session;
else
return null;
这是一个方便的属性,所以用哪个都没关系。
使用上下文可以保证您正在访问正确的会话。在使用会话之前,您应该始终检查会话是否为空。这是很好的编码实践。快捷方式是懒惰的,会导致错误,是不好的做法。