【问题标题】:session management in standalone applications独立应用程序中的会话管理
【发布时间】:2015-02-03 20:13:58
【问题描述】:

我有一个可以安装在多台机器上的独立应用程序。 需要为每个用户做会话管理。 目前我们正在维护一个数据库表来保存用户ID,登录和注销时间以及登录状态。(用户登录时为“Y”,用户退出时为“N”。)这允许用户只登录一个应用程序的实例。

现在的问题是:如果系统在一台机器上崩溃,数据库中该用户的状态仍为“Y”, 并且不允许用户再次登录。如何识别系统崩溃? 或者,如何在 Mac Id 中存储登录信息? 谢谢!

【问题讨论】:

    标签: java session


    【解决方案1】:

    始终覆盖上次登录。

    例如有终端A和终端B 当用户在终端 A 上登录时,他在那里有一个实例。 当他切换到终端 B 时,登录正常,但在终端 A 上工作的其他任何人都将被强制注销。

    这就是windows远程桌面的工作方式,它可以避免你在其他机制中遇到的很多问题。

    【讨论】:

    • 让我解释一下我的场景:用户1登录终端A,系统在表中输入状态为“Y”,用户1注销状态更改为“N”,用户1再次登录,系统检查状态是否为 "N" ,然后才允许用户登录(无论是在终端 A 还是 B 上)。只要我们没有崩溃就可以正常工作....也就是说,USer1 在终端 A 上登录,应用程序崩溃并且状态保持为“Y”,因此下次用户通过终端 A 或 B 登录时,系统检查数据库表中的状态,它的“Y”因此不允许user1登录,
    • 问题是识别崩溃,或者找到一种更好的方法来维护用户的登录状态,考虑到任何用户都可以使用任何终端登录,只要他在网络上只运行一个应用程序实例
    • 您处理问题的方法有误。 总是覆盖最后一个会话 如果会话有效,则有一个方法每 10 秒检查一次登录状态。如果它无效,它会自动关闭客户端。这样,当用户在另一个终端上登录时,另一个打开和活动的客户端就会关闭。这样你就不用担心崩溃了。上次登录是有效的登录,无论从哪里登录。
    • 好的,所以你的方法(用数据库术语)是当用户登录到终端 A 时,我将状态设置为“Y”,我需要有一个方法来检查它是否有效每10秒登录一次,有效登录到底是什么意思? (就凭据或状态而言?)另外,当同一个用户从另一个终端 B 登录时,我应该检查状态是否已经是“Y”(因为另一个用户已登录)然后我将如何在终端 A 上知道用户也从终端 B 登录并且“另一个打开和活动的客户端被关闭”?谢谢
    • 登录后,用户会获得指定的当前密钥 Y2014。每次用户登录时,他都会获得不同的密钥。如果当前密钥仍然存在,您的服务器会轮询客户端。服务器->客户端“给我你的密钥”客户端到服务器好的,很好。当用户在其他终端上登录时,他获得了 Y2015 密钥,使其他终端上的密钥无效,因此服务器在轮询“You ded man”时发送到第一个终端,终端自行关闭。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 2012-07-03
    • 1970-01-01
    相关资源
    最近更新 更多