【问题标题】:Identify current session within Windows Forms application: session ID?识别 Windows 窗体应用程序中的当前会话:会话 ID?
【发布时间】:2009-06-15 21:31:33
【问题描述】:

在 ASP.NET 中,每个会话都可以通过其 SessionID 变量来标识。目前,我正在开发一个项目,我希望能够识别每个单独的用户会话。换句话说,我正在寻找会话标识符或等效变量。

我查看了 Application、Environment 和 AppDomain 类,但找不到这样的变量。所以我的问题是:应该如何识别应用程序当前正在处理的会话?

【问题讨论】:

    标签: winforms session


    【解决方案1】:

    也许System.Diagnostics.Process.GetCurrentProcess().Id 可以满足您的需求?这将为您提供一个唯一标识系统上当前正在运行的进程的编号。该编号仅在进程运行时有效,当它退出时,任何其他进程在启动时都可以分配相同的编号。

    【讨论】:

    • 听起来像是朝着正确方向迈出的一步。但是,我不能保证下次用户启动应用程序时,进程 ID 与第一次启动的 ID(“会话”)不同?
    • 不,理论上你可以连续两次启动应用程序并获得相同的进程ID。唯一可以保证的是,在给定的系统上,永远不会有两个进程同时运行且具有相同的 id。如果您在应用程序关闭时删除与会话相关的信息,这应该不是问题。
    • 我查看了 System.Diagnostics.Process.GetCurrentProcess() 并且虽然有一个属性 SessionID,但属性 StartTime 很大程度上满足了我的需求。可以根据开始时间识别会话。对于我正在工作的项目,这就足够了。谢谢。
    【解决方案2】:

    我不太确定我是否关注您,但如果您尝试跟踪应用程序生命周期的每个实例,您可以在适当的地方创建一个 GUID 作为实例成员。每当您觉得创建了一个新的“会话”时,您都可以创建并存储此 GUID - 可能在用户登录时(或者如果您没有登录机制,则加载主表单)。

    我当然假设您有一个连接了某种服务器的多用户环境,否则我真的看不出需要会话。

    【讨论】:

      【解决方案3】:

      您可以检查 Environment 类中的一些选项,例如 Environment.UserName、Environment.MachineName 或 Environment.UserDomainName

      【讨论】:

      • 这是我目前所做的。但是,我还想区分来自同一个用户的两个应用程序启动事件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-01
      • 1970-01-01
      • 2019-03-17
      • 2020-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多