Asp classic 在经典的ASP应用程序中,使用会话或cookie进行跨页数据持久化是否更好?

Asp classic 在经典的ASP应用程序中,使用会话或cookie进行跨页数据持久化是否更好?,asp-classic,session-variables,client-side-data,Asp Classic,Session Variables,Client Side Data,我继承了一个经典ASP应用程序的修复程序,其中我们希望存储一些特定于用户会话的数据,以便在页面加载/其会话期间持久化,并且需要一些刷新 在过去,我只是简单地使用了会话变量,即Session(“SomeVar”)=SomeVal 在生产框的IIS中,我注意到ASP/Session Properties/Enable Session State=false。将此设置为True允许我成功地开始使用会话变量 我不想在服务器上消耗任何超出需要的资源。在过去,我相信我有一种错觉,认为经典ASP中的会话变量存

我继承了一个经典ASP应用程序的修复程序,其中我们希望存储一些特定于用户会话的数据,以便在页面加载/其会话期间持久化,并且需要一些刷新

在过去,我只是简单地使用了会话变量,即
Session(“SomeVar”)=SomeVal

在生产框的IIS中,我注意到ASP/Session Properties/Enable Session State=false。将此设置为True允许我成功地开始使用会话变量

我不想在服务器上消耗任何超出需要的资源。在过去,我相信我有一种错觉,认为经典ASP中的会话变量存储在客户端。现在重新讨论这个问题-数据保留在服务器端

我保存的字符串是一个GUID,用于大约3000个连接的客户端


如果我实现了这一点,我会看到什么样的服务器影响,使用客户端cookie会是一个更好的选择吗?

让我们稍微分析一下,一个GUID需要大约40个字符作为一个字符串,因此在Unicode中是80字节,我们称之为100字节。100*3000=300KB。服务器是否可以为此腾出300K?如果答案是否定的,我想服务器已经有问题了

但是,启用会话状态还有其他影响。启用会话后,ASP会将自己的cookie添加到客户端,其大小可能相当于将GUID存储为cookie而不是会话中所需的cookie。值得注意的是,存储在cookie中的会话ID使用了一种算法,有人说这种算法更容易预测(我自己也没有任何证据)。因此,如果您使用GUID作为某种形式的授权,那么直接将GUID存储为cookie可能会更好

当启用会话状态时,会发生另一个重大变化。来自客户端的ASP请求必须串行处理,服务器不会并行处理来自同一客户端的多个请求。这是因为Session对象是单线程的,并且由于来自客户端的每个请求都需要访问它,因此不能同时处理这些请求

最后一点可能会对客户机看到的现有行为和性能产生重大影响,特别是在使用AJAX技术、多个iFrame或其他导致同时向服务器发送ASP请求的技术时


因此,对于您的要求,我的选择是将GUID存储在cookie中,并保持会话状态处于关闭状态。

让我们稍微分析一下,GUID以大约40个字符作为字符串,因此在Unicode中为80字节,我们称之为100字节。100*3000=300KB。服务器是否可以为此腾出300K?如果答案是否定的,我想服务器已经有问题了

但是,启用会话状态还有其他影响。启用会话后,ASP会将自己的cookie添加到客户端,其大小可能相当于将GUID存储为cookie而不是会话中所需的cookie。值得注意的是,存储在cookie中的会话ID使用了一种算法,有人说这种算法更容易预测(我自己也没有任何证据)。因此,如果您使用GUID作为某种形式的授权,那么直接将GUID存储为cookie可能会更好

当启用会话状态时,会发生另一个重大变化。来自客户端的ASP请求必须串行处理,服务器不会并行处理来自同一客户端的多个请求。这是因为Session对象是单线程的,并且由于来自客户端的每个请求都需要访问它,因此不能同时处理这些请求

最后一点可能会对客户机看到的现有行为和性能产生重大影响,特别是在使用AJAX技术、多个iFrame或其他导致同时向服务器发送ASP请求的技术时


因此,对于您的要求,我的选择是将GUID存储在cookie中,并保持会话状态处于关闭状态。

多个服务器/服务器场?如果是这样的话,如果负载平衡器未设置为“粘滞”,并且每次都将您发送到同一台服务器,那么使用会话时可能会遇到问题。能不能给我一个真正头疼的问题,就是调试得如此小心。

多个服务器/服务器场?如果是这样的话,如果负载平衡器未设置为“粘滞”,并且每次都将您发送到同一台服务器,那么使用会话时可能会遇到问题。这么小心调试真让我头疼