MVC - 将变量存储到下一个请求

时间:2015-08-10 05:35:24

标签: asp.net-mvc var httpcontext viewbag

我有一个接收两个参数的方法(int?,string)。我的控制器中的操作必须保存此变量并返回带有表单的视图。从客户端返回表单后,我需要来自先前请求的这些变量。我可以将它们传递给ViewBag进行查看并将表单添加为隐藏,但这非常危险,任何人都可以在浏览器中更改它。有什么想法吗?

我认为这个问题没有意义。 如果我有使用HTTP GET方法接收两个参数的方法,那么用户在get方法或表单中更改这两个变量没有区别。 如果我将它存储在服务器端,他可以在将参数传递给第一个方法时更改,服务器将存储错误的变量。
例如:
http://www.someurl.com/Controller/Action/?id=123&key=someKey
我可以通过编辑更改参数url,所以荒谬地将它作为变量存储在服务器端,以确保用户不会通过editig隐藏字段来更改它。此外,我可以检查密钥是否与具有此id的数据库中的密钥相同。

2 个答案:

答案 0 :(得分:3)

  

会话时间为20或30分钟。用户可以打开此表单并在会话结束时提交。用户不喜欢异常

允许表单在一定时间后过期是非常标准的。你可以永远保持会议开放,因为这是一个安全漏洞。

对于实际值,您可以在处理完第二页后立即将其从会话中删除。如果在第二页被点击时该值不存在,只需再次重定向到第一页并显示一条消息,表明它花了太长时间。

您的第二个选择是使用TempData专门用于存储两页之间的值。用户无法访问TempData

第三个选项当然是将值存储在数据库中(只要你愿意,在登录之间保存它等)

答案 1 :(得分:0)

您可以在用户的​​当前会话中存储您喜欢的任何对象。在您的控制器中,您可以使用:

// Save value to session
Session["MyVariableName"] = 32;

// Read value from session
int myVariable = (int)Session["MyVariableName"];

有关会话的详细信息,请参阅:https://msdn.microsoft.com/de-de/library/system.web.httpcontext.session(v=vs.110).aspx