3

我们公司使用的应用程序最初是 ColdFusion + Access,后来转换为经典的 ASP + MS Sql,用于任务/时间跟踪,称为请求系统。它是按部门划分的,所以有一个用于管理信息系统、市场营销、物流等。当(主要是经理)一次使用多个浏览器窗口时,问题就出现了,并且打开了 2 个浏览器窗口。请求系统使用会话变量,会话变量很多,“会话”在应用程序中被引用了2300次。正如您可以想象的那样,当 2 一次打开时,这会导致变量混淆的各种异常情况。

系统中有一个 3 年前的 MIS 请求来“修复”这个问题,并且已经由 3 个开发人员进行了工作,现在轮到我来尝试一下了。我想知道是否有其他人必须从事这样的项目,以及是否有某种黑客来尝试缓解一些问题。我在想也许在 global.asa 中调用一些东西来加载杂项。来自查询字符串的会话变量。问题是,发生了各种各样的事情:

If (Session("Application") <> Request("App")) and Request("App") <> "" THEN
  Session("Application") = Request("App")
End If

查看包含文件中的函数,您将拥有一个带有 4 个参数的函数,它引用了 6 个不同的会话变量。所以你明白了,这将是痛苦的。

过去有没有人必须做这样的事情?您发现任何有用的技巧?

4

5 回答 5

2

从直接 Session("whatever") 接口中重构代码:

  1. 创建一个用于会话访问的 API 并用它替换所有现有的 Session 使用(它可以是会话“类/对象”或只是一个包含文件)
  2. 使用可以根据您的需要(部门或其他)使它们在每个域中唯一的东西来修改会话变量的传入名称
  3. 仔细测试

然后用现代网络语言重写整个事情,和/或在他们要求你创造另一个奇迹之前找到另一份工作;-)

于 2008-11-10T20:45:49.943 回答
0

我的经理(他是业务人员,而不是代码人员)对这个系统非常着迷。他并不急于重写它。如果我确实重写了这个,唯一使用的会话变量将与登录相关。不幸的是,我更关心快而不是正确:(

于 2008-11-10T20:49:44.083 回答
0

多少次“会话”被引用并不像你想象的那么重要。此外,除非出现编码错误,否则打开两个浏览器应该启动两个单独的会话,并且这些会话的值不应该有任何“混合”。

我怀疑这可能与其他一些事情有关,例如从同一个 cookie 读取的两个会话或 App 变量的一些问题。没有看到整个来源,很难说。如果有更熟悉代码的人来帮助您,可能值得一试。

是的,在代码中挖掘会很痛苦,但至少下次你必须修复某些东西时你会知道更多。;)

此外,重写并不总是最好的选择。你永远不知道在重写中丢失了哪些有趣的业务逻辑/错误修复。

于 2008-11-23T15:17:19.187 回答
0

我同意 AnonJr

打开两个浏览器的 Blockquote 应该启动两个单独的会话 Blockquote

也许使用静态全局变量会导致您的数据丢失

于 2008-11-23T15:27:36.640 回答
0

在您的会话类中(如果您将使用一个),当您引用每个变量时,请使用前缀或常见的东西,以便您可以识别所有变量......然后您可以遍历所有会话变量,也许找到其他正在被引用/创建...

Private Const PREFIX As String = "MyPrefix_"
Public Shared Property MyVariable() As String
    Get
        Return HttpContext.Current.Session(String.Concat(PREFIX, "MyVariable"))
    End Get
    Set(ByVal value As String)
        HttpContext.Current.Session(String.Concat(PREFIX, "MyVariable")) = value
    End Set
End Property

循环查找不在您的课程中的会话变量

For Each Item As Object In HttpContext.Current.Session.Contents
    If Not Item.ToString.StartsWith(PREFIX) Then

    End If
Next
于 2009-07-03T05:15:21.193 回答