6

我正在我的应用程序和 MySQL之间使用 Jersey 开发一个 Restful Web 服务。Android, iPhone我还使用Hibernate将数据映射到数据库。

我有一个 sessionId(密钥)。它是在用户登录系统时生成的。

User课堂上:

public Session daoCreateSession() {
    if (session == null) {
        session = new Session(this);
    } else {
        session.daoUpdate();
    }
    return session;
}

Session课堂上:

Session(User user) {
    this.key = UUID.randomUUID().toString();
    this.user = user;
    this.date = new Date();
}

void daoUpdate() {
    this.key = UUID.randomUUID().toString();
    this.date = new Date();
}

当用户成功登录系统时,我将此 sessionId 发送到移动应用程序客户端。然后,当我想根据登录用户从数据库中获取一些信息时,我会检查此会话密钥作为每个请求的身份验证in the REST Services

例如,对于用户参与的项目列表,我使用client.GET(SERVER_ADDRESS/project/get/{SessionID})

位于client.GET(SERVER_ADDRESS/project/get/{username}).

如果它不是有效的会话密钥,我将向客户端发送 403 禁止代码。你也可以看看这里

问题是我不确定我的方法。cons对于泽西岛和移动应用程序,您如何看待这种方法?我仍然不知道这种Session key方法对我来说是否是个好主意。

4

2 回答 2

6

如果你想使用 SessionId 那么它应该有一个验证时间,像这样:

private static final int MINUTES = 90;

public boolean isValid() {
   return System.currentTimeMillis() - date.getTime() < 1000 * 60 * MINUTES;
}
于 2012-09-04T17:52:27.220 回答
4

这是一个已解决的问题 - 像 Tomcat 这样的 servlet 容器已经进行了会话管理,并且可以通过 TCP 广播或使用 memcache 等共享数据源将会话状态分发给集群中的其他容器。

我建议阅读已经可用的内容,而不是无意中重新发明轮子。此外,如果您的应用程序被证明很受欢迎,这将成为一个非常热门的表格。您将如何清除旧的会话 ID?

于 2012-09-03T10:30:45.720 回答