跨回发存储状态
跨回发存储字符串数据的最佳方式是什么?我需要为多个实体存储一个ID和名称。我正在考虑在视图状态下使用数据表,但这会使视图状态变得太大吗?我还不能使用数据库,因为我将插入一条记录,这些记录需要与其他记录相关联。所以我会暂时存储它们,直到用户提交表单。跨回发存储状态
实际上您有很多选择 - 您选择的选项完全取决于您自己的应用程序的要求。
ViewState - 您可以将数据添加到页面的视图状态。这样做的好处是,数据将只在用户在页面上的一生中存在并将其发回服务器。它比隐藏字段的另一个优点是用户难以破解它并改变你的值(我相信,事实上,你可以加密你的视图状态)。当然,缺点在于页面大小 - 您添加到视图状态的所有内容都是在用户页面上丢弃的内容,然后发送回服务器。这使得它不适合存储大量数据。
饼干 - 您可以将信息以饼干的形式返回给用户。在这种情况下,您可以声明信息的持续时间 - 用户浏览器的范围或打开特定的日历时间。每当用户点击该页面时,该信息将可用于应用程序的任何页面。坏消息是,你可以存储的信息量有限,用户可以很容易地改变他们自己的cookies。
会议 - 你存储在自己的服务器的内存用户的信息(我暂时把不同类型的会话存储的讨论)。在这种情况下,只要您的用户会话处于活动状态,信息就会存活,并且您的应用程序的所有页面都可以使用这些信息。用户不会直接修改这些值,尽管会话劫持是您可能想要探索的风险。它的缺点,不过,是你在这种情况下使用宝贵的服务器资源 - 如果你的应用有一个大的负荷,可能会影响你的可扩展性的未来。
正如我所说 - 你选择做什么将完全取决于你的应用程序的需求和要求。
你可以将它们存储到一个cookie,这将允许你从Javascript访问它们。或者,您可以将简单的字符串数组存储到视图状态。很大程度上取决于你希望存储什么和多少信息。
几种方法(虽然不是一个详尽的清单):
- 的ViewState
- 隐藏字段
- 会议
- 查询字符串
- 饼干
的ViewState是罚款。如果您通过回发来存储它,客户端解决方案是最好的。所以,你会在某处添加大小 - 无论是在ViewState还是隐藏字段。
如果你想做这个服务器端,你可以使用会话,但记得清理它,当你可以。
当我有这种情况下,我创建了我的领域,我塞进视图状态的结构。我可以在页面大小和生命周期中添加一个小的结构,因为整个页面的控件集合已经存在:)
此外,在完成页面之后,它自行清理完毕,因此不必担心关于用垃圾填充你的Session。
我同意accepted answer,但我还想补充一点,如果你只是想跟踪一个简单的键/值集合,你会得到更好的把一个普通的字典到无论是ViewState中或会议:
Dictionary<int, string> myValues = new Dictionary<int, string>();
myValues.Add(1, "Apple");
maValues.Add(2, "Pear");
大回答,但我可以要求澄清一件物品吗?我一直在使用'静态字符串'来持续回发,但是如果我有两个不同的用户同时填写它们的唯一数据(即名字),他们的记录会得到相同的名称,而不是它们的唯一名称。上述哪一项对每个客户端来说都是本地化的,并且不受其他客户端数据的影响仍然存在一些混淆。 Cookies和Session都很好看,但是每个客户端都有独特的Cookie?即使他们存储在“你的服务器自己的内存”中,Sessions对每个客户端都是唯一的吗? – FlashTrev 2015-04-01 21:16:26