进程是经典ASP可以存储会话状态的唯一方法吗?

时间:2009-07-10 17:17:25

标签: session asp-classic

我知道这是一个简单的问题,但我似乎无法将其拖出Google噪音。我知道.NET可以使用会话状态服务或SQL数据库来支持其会话状态,但我不知道ASP是否提供了存储它的任何进程外选项。是否有任何问题,或者当负载均衡服务器脱机时,我是否会在ASP应用程序中丢失会话变量?

2 个答案:

答案 0 :(得分:5)

是的,只在内存中

来自MSDN Full Article

ASP实施

本机ASP会话只能将会话数据存储在内存中。为了将会话数据存储到SQL Server,编写自定义Microsoft®VisualBasic®6.0COM对象来管理会话状态,而不是使用本机会话对象。此COM对象将在每个Web请求的开头实例化,并从SQL Server重新加载会话数据。 ASP脚本完成后,此对象将终止,会话状态将持久保存回SQL Server。

Visual Basic 6 COM会话对象的主要用途是提供对Microsoft®InternetInformation Server内部对象的访问。 Visual Basic 6.0 COM会话对象使用SessionUtility组件的mySession类来保存会话状态,使用SessionUtility的SessionPersistence类来加载和保存SQL Server的会话数据。 mySession和SessionPersistence类使用regasm.exe实用程序公开为COM对象。 regasm.exe实用程序可以注册并为COM客户端创建一个类型库,以使用Framework类。

在构造对象期间重新加载会话状态信息。构造函数(class_initialize)将首先从Application对象检索会话cookie,会话超时(SessionTimeOut)和数据库连接字符串(SessionDSN),并创建类mySession的实例来保存会话数据。然后构造函数将尝试使用给定的cookie从SQL Server重新加载会话数据。如果SQL Server没有会话信息,或者会话已过期,则将发出新的cookie。如果SQL Sever确实返回了会话状态数据,则会话状态将存储在mySession对象中。

答案 1 :(得分:4)

没有其他内置功能,但在ASP Classic中构建自己的会话管理系统非常容易。最简单的形式是db中的表,如下所示:

SessionID int PK, 字段文字, 值文字, 过期日期时间

为字段和值提供某种CSV编码器/解码器,并在每个页面上填充集合。然后在页面执行后保存并更新到期时间。然后只需要一个cookie跟踪会话ID或在查询字符串中传递它。