17

我想HttpSession通过 JSESSIONID 获取 Java。是否可以?如果是,如何?

4

3 回答 3

33

您需要自己收集Map它们HttpSessionListener

public class HttpSessionCollector implements HttpSessionListener {
    private static final Map<String, HttpSession> sessions = new HashMap<String, HttpSession>();

    @Override
    public void sessionCreated(HttpSessionEvent event) {
        HttpSession session = event.getSession();
        sessions.put(session.getId(), session);
    }


    @Override
    public void sessionDestroyed(HttpSessionEvent event) {
        sessions.remove(event.getSession().getId());
    }

    public static HttpSession find(String sessionId) {
        return sessions.get(sessionId);
    }

}

只需web.xml按如下方式注册即可运行它:

<listener>
    <listener-class>com.example.HttpSessionCollector</listener-class>
</listener>

然后,无论您想做什么,都HttpSessionCollector.find(sessionId)可以解决HttpSession问题。


也就是说,这是一种巨大的气味。当然有比这更好的方法来解决实际的功能需求;)正如我在您的后续问题中评论的那样:

这是你第二次问一个在现实世界中永远不应该练习的问题。老实说,这一切都闻起来了。它是什么,您认为HttpSession 在服务器端获取与 JESSSONID 相关联并在客户端获取 JSESSIONID 值的问题是“解决方案”?在一个新问题中对此进行详细说明,您将获得如何正确执行此操作的答案。

认真对待。我们不是在取笑您,我们只是想帮助您朝着正确的方向前进,以避免您的项目/webapp 由于安全漏洞和不良做法而中断和/或您将被解雇。

于 2010-06-22T11:09:11.887 回答
2

You can do it as per BalusC's answer, but the existence of such a facility is a prima facie security breach between different users. You shouldn't be building things like this into your application.

于 2010-06-23T04:13:48.620 回答
1

不,API 不允许这样做。

我会说更多,但这就是它的全部内容。

于 2010-06-22T10:57:43.920 回答