如何管理Http会话? (没有外部库)

时间:2018-01-12 01:50:42

标签: java session

我正在研究 servlet Http和WebSocket服务器,我想知道为客户实现会话ID的最佳方法是什么。

我想在客户端将id设置为cookie并将其保存在服务器端的内存中,因为这是我常见的。

但是,让我们说客户端A 向服务器发出第一个请求,A从服务器接收其会话ID,让我们称之为 A_SESSION 为了清楚起见。 此时,服务器知道A_SESSION标识客户端A.

让我们说客户端A有不良意图,一旦收到会话ID就会设置一堆变量并通过服务器提供的某些API填充数据,然后清除会话 id又发出新会话的另一个请求,在服务器将在内存中设置大量无用的变量之前很久就不会为空并且可以&# 39;垃圾收集。

  1. 您将如何保存这些数据?
    首先想到的是将这些变量保存在Map<String,Object>中,其中地图的每个键都是会话ID而对象是数据(可能是另一个Map<>JsonObject?)。
  2. 您何时删除数据?
    您是否只设置了TTL变量?
  3. 最重要的是,您可以认为这应该是我的第一个问题:是否有办法为同一台客户端计算机生成相同的会话ID且仍然安全?
  4. 我没有发布任何代码,因为它很长,而且我怀疑它与问题有关,这更像是一个政策问题,而不是编码问题。

    但我仍然认为我应该提供更多上下文,并让您知道我可以访问哪种客户信息。

    当我说我没有使用任何外部库时,我的意思是我没有使用除核心Java之外的任何库。

    我直接使用ServerSocket和Socket对象管理http连接,比如

    ServerSocket ss = new ServerSocket();
    ss.bind(new InetSocketAddress(bindAddress, port));
    init();
    while(true){
        new HttpEventListener(ss.accept()).start();
    }
    

    HttpEventListener是我基本管理客户的地方。 我有客户&#39; ip地址,请求标头和ofc我可以将每个连接标识为Socket

0 个答案:

没有答案