什么样的数据永远不会进入会话?

时间:2010-02-02 00:58:29

标签: asp.net session

会话中永远不应保留哪些数据?

9 个答案:

答案 0 :(得分:7)

我真的希望你的意思是什么 kind 更清楚。根据答案,我可以拿出一对:

  • 任何类型的密码
  • 大量数据,尤其是32位操作系统上的4 GB +(如果必须加载到RAM中,则保证内存不足)
  • 可执行代码
  • 原始SQL
  • 发誓话语
  • 可能让政府机构感到愤怒的事情(中国的“自由西藏”,美国总统面临的威胁)
  • 您的银行帐户密码或信用卡号
  • 一只狂暴的獾。实际上,任何一种獾。

答案 1 :(得分:4)

如果可能,请在会话中存储 nothing 。维护状态是一种不可靠的方式,特别是如果您需要迁移到Web场。另外,我认为它鼓励设计不佳。 HTTP是无状态的,网站的设计方式应该假设对于任何请求,您可以从头开始。

答案 2 :(得分:2)

答案 3 :(得分:2)

这个答案适用于PHP会话。

如果您的意思是$_SESSION,那么它会存储在硬盘驱动器上,因此它不能立即用于Cookie之类的任何内容。

但是,在共享主机上,从其他网站访问会话文件有时可能很简单。

我不会在您希望共享主机上的任何其他人看到的会话中存储任何内容。

答案 4 :(得分:1)

这可能是一个非常主观的问题。从技术上讲,任何可序列化的东西都可以存储在会话中。但是肯定有一些情况你不想在会话中添加内容。复杂对象,具有大型集合作为属性的对象等。所有这些都被序列化为字节数组并保存在内存中(对于InProc会话状态),然后在需要时再次反序列化。对象越复杂,它就可以来回传递更多的资源。

根据您拥有的用户数量,您可能希望限制进入会话的项目数,并可能使用ViewState或其他持久性方法。如果它确实适用于多个页面,那么它可能是会话的一个很好的候选者。如果它只在一两页中使用,那么ViewState,QueryString等可能会更好。

答案 5 :(得分:1)

我不会将session放在session内!

答案 6 :(得分:0)

只要您将SessionMode="InProc"保留在web.config中,就可以在会话中存储任何内容。这会将任何会话数据存储在用户特定上下文中的Web服务器内存中。

但是,如果要扩展一天并在服务器场中运行Web应用程序,则必须使用另一个SessionMode。那么你就不能再存储那些不可序列化的复杂类型的对象(不幸的是,字典是一个常见的候选者),你将不得不改变你的设计。

答案 7 :(得分:0)

  • DataSet:将数据集序列化以存储在会话中可以占用比数据集本身多一个数量级的内存(即1MB数据集可能需要20MB来串行/反序列化,并且它会在每次请求时执行此操作)。
  • 控件:在会话中存储控件(及其集合)意味着ASP.NET无法在页面请求结束时正确清理它们,从而导致内存泄漏。

有关您不应该参加会议的其他事项的示例,请参阅Tess Ferrandez's blog以及原因。

答案 8 :(得分:0)

股票提示,盗版光盘,完整电影(除了“文员”,电影很棒),模拟信息,......

这个问题似乎有点模糊 - 我可以想到不应该存储在会话中的无数种信息!