我使用TempData
是为了在使用RedirectToAction
时保留我的模型。它工作得很好,但我有一种纠结的感觉,那就是这可能不是正确的做法。我真的尽量避免使用会话数据,我读到过TempData
使用会话。它使用起来安全吗?在负载均衡环境中使用它是否会出现问题?
琐碎问题:“安全吗?”--说出电影的名字。
发布于 2011-11-23 22:18:35
是的,TempData是由会话存储支持的,所以如果您处于负载平衡环境中,则在使用它时必须格外小心(粘滞会话、持久会话状态等)。
在使用PRG模式时,TempData已经成为事实上的选择,而且它也是为此而设计的。
至于这是不是正确的选择...这取决于你的用例!
PS马拉松人。
发布于 2011-11-23 22:51:57
好吧,我认为这要看情况。如果您使用负载均衡器和多个前端服务器处理大量流量,则需要避免使用会话对象,因为它可能会降低性能,并使水平扩展变得困难(场中的请求并不总是出现在同一个web服务器上)。
TempData是短暂的,如果你不在那里放置大量的对象,并且仔细考虑整个架构,那么我认为它是安全的。有很多网站广泛使用它,并且没有问题(我在共享的和专用的托管网站上工作,每天平均有50-70k访问者使用会话,通常是在同一服务器上使用web和db )。
发布于 2011-11-23 22:33:13
只要有可能,我就会选择一种完全无状态的方法。它更具可伸缩性,不受单个服务器问题的影响。通常,您可以只使用cookie (受到适当保护以防止篡改)来识别用户并每次从数据库中提取数据。
除此之外,我还建议你评估一下是否可以用View
代替RedirectToAction
。这一点:
TempData["model"] = model;
return RedirectToAction("SomeAction");
可以替换为:
return View("SomeAction", model);
当然,假设"SomeAction“是一个可以从当前控制器访问的有效视图(它要么是同一个ctrl中的一个视图,要么是在Shared中定义的视图),并且它不仅仅是一个重定向到另一个的中间操作。
https://stackoverflow.com/questions/8243613
复制相似问题