我有一个控制器将逻辑查找:会话值
//checks value null etc.. for existing record in session memory.
Session["certnum"]
然后在控制器中我决定有一个条件:
//is called to initiate a New Record that will be created.
Session.Abandon();
然而在程序编码中是Session.Abandon();在创建TempData [“myobject”] =“foo”之前,在单步执行代码时,立即窗口中的TempData显示我的值,一切看起来都很好。然后在重定向到另一个控制器时:
return RedirectToAction("ChildInfo", "NewRecord");
此ChildInfo方法不再具有TempData值...现在它为null。在设置TempData值之前调用了Session Abandon方法,不确定这是否是MVC Sessions的错误,但这对我来说毫无意义。如果我正在创建一个新的轻量级会话TempData,那么它应该持久保存到下一个控制器。如果我删除Session.Abandon()方法,那么TempData值将保持原样,就像之前一样。
答案 0 :(得分:11)
Session.Abandon()
方法会在请求结束时清除当前会话,以及它的设计目标。
请参阅http://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.abandon.aspx
如果要重定向到其他操作,则需要像完成一样调用重定向。如果您使用Abandon()
,请求将获得新的会话ID。
如果您想从会话中删除某些内容,则需要使用Session.Remove
或Session.RemoveAll
方法(Clear
也可以与RemoveAll
相同。这将通过以下方式完成:
Session.Remove(itemToRemove);
或
Session.RemoveAll()
通过使用这两个选项中的任何一个,您可以从会话中删除部分或全部先前存储的数据,而不会实际导致在下一个请求中重新生成会话ID。
答案 1 :(得分:1)
Session.Abandon
方法不会清除会话对象,它只标记不应该保留它。在当前请求期间,会话对象仍然完好无损。
当响应完成时,会话对象被放弃,以便下次浏览器发出请求时,服务器必须设置新的会话对象。在会话对象被放弃时,您在整个请求期间放入会话对象的任何内容都会消失。
当您进行重定向时,会将重定向页面作为响应发送到浏览器,然后浏览器会请求新页面。如果您将会话对象标记为要放弃,然后执行重定向,则新页面将获取新的会话对象。
答案 2 :(得分:0)
这就是它应该如何运作。
Session.Abandon不会立即终止会话。它持续到页面结束。然后,在下一页加载时,将创建一个新会话。