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

问题描述:

会话中永远不应该保存什么类型的数据?什么样的数据永远不会进入会话?

+1

请详细说明您的环境,包括语言和如何存储会话数据。 – 2010-02-02 01:05:16

+0

它是ASP.NET技术,我在使用tepm用户的操作中遇到了问题,我保持会话并且有点复杂的文档上传功能,在会话中保留整个文档直到它们存储在数据库中,因为这是我们的团队项目有建筑讨论.. – eomeroff 2010-02-02 01:13:24

+0

为什么有人不喜欢这个问题? – eomeroff 2010-02-02 01:20:24

COMcomplex对象。

这个链接也可以是有用的:ASP.NET 2.0 Performance Inspection Questions - Session State

这个答案是PHP会议。

如果你的意思是$_SESSION,那么它存储在硬盘驱动器,所以它不会立即在任何类似的饼干。

但是,在共享主机上,访问来自其他网站的会话文件有时很容易。

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

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

但是,如果您想要放大一天并在服务器场中运行您的Web应用程序,则必须使用另一个SessionMode。然后,您不能再存储不可序列化的复杂类型的对象(不幸的是,字典是常见的候选对象),您将不得不更改设计。

+0

在这种情况下,多GB的数据*可能会造成问题。特别是如果在32位网络服务器上(理论上可行)。 – BobMcGee 2010-02-02 02:18:45

+0

第二段是为什么我总是使用''sessionState mode =“StateServer”... />' - 当我尝试并存储一个不可序列化的对象时,我会马上得到一个错误。 – devstuff 2010-02-02 03:16:24

  • 数据集:串行化的数据集在会话存储可能需要最多数量级比该数据集本身更存储器的顺序(即一个1MB数据集可以需要20MB到序列化/ deserialise,它也即在每次请求)。
  • 控件:在会话中存储控件(及其集合)意味着ASP.NET无法在页面请求的最后清理它们,导致内存泄漏。

请参阅Tess Ferrandez's blog了解您应该永远不应放入会话的其他示例,以及原因。

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

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

股票的提示,盗版光盘,完整长度的电影(除“科员”,那部电影是真棒),模拟信息,...

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

如果可能,在会话中存储没有任何。这是维护国家的不可靠方法,特别是如果您需要迁移到网络农场。另外,我认为它鼓励糟糕的设计。 HTTP是无状态的,并且网站的设计方式应该是假定对于任何请求,您都可以从头开始。

+0

用户会话适用于Web场,但不适用于应用程序会话。 – 2010-02-02 03:03:19

+0

我同意雅各布。如果你的请求是无状态的,它使得该网站更容易测试。 – 0sumgain 2010-02-02 03:18:26

+2

@Chris,即使是用户会话,也不能100%依赖他们。在任何时候,场中的一个节点都可以被删除,从而清除存储在那里的所有内存中会话。当然,您可以将会话存储在数据库中,但您也可以在该点使用具有已定义模式的实际表格。 – Jacob 2010-02-02 03:25:58

我不会把session里面的session也!