0

我已经开发了 servlet 服务器和 javaclient,想知道如何保持会话保持连接。

现在,我的 javaclient 将调用我的 servlet,然后服务器会将数据返回给客户端。客户端处理完数据后,它将再次为其他进程调用相同的 servlet。但服务器无法检索现有会话。所以我无法验证之前访问过的客户。有什么想法吗?这里是我的环境:服务器:apache + jrun4 客户端:java 客户端

它在 reqType = Login 时返回空指针,我想保留相同的会话以进行进一步处理

private void getReqParameter( HttpServletRequest request, HttpServletResponse response, RandomAccessFile logFile) {

String sSessionID="", sReqType="";

String sAddress1="", sAddress2="", sAddress3="", sID="", sPwd="", sSigID="";

sReqType = (String)request.getParameter("reqType");

HttpSession sess = request.getSession(false);
if (sReqType.equals("HandShake")){
    sess = request.getSession(true);
    sSessionID = sess.getId();
    out.println(sSessionID);
    return;
}

sID = (String)request.getParameter("ID");
sPwd = (Sring)request.getParameter("Pwd");
sSigID = (Sring)request.getParameter("SigID");

if (sReqType.equals("Login")){
    sess = request.getSession(false);  
    sSessionID = sess.getId();
    return;
}     

sAddress1 = (String)request.getParameter("A1");
sAddress2 = (String)request.getParameter("A2");
sAddress3 = (String)request.getParameter("A3");

if (sReqType.equals("UpdProfile")){
    sess = request.getSession(false);   
    sSessionID = sess.getId();
    return;
}     

}
4

2 回答 2

0

感谢你的信息。

我尝试将设置会话 ID 添加到 cookie 并将其传递给客户端。但我不知道如何取回客户端返回 cookie 或将会话 ID 定义为客户端返回。

HttpSession sess = request.getSession(false);
if (sReqType.equals("HandShake")){
    sess = request.getSession(true);
    sSessionID = sess.getId();
    out.println(sSessionID);

Cookie cookie = new Cookie("JSESSIONID", sSessionID);
cookie.setPath(request.getContextPath());
response.addCookie(cookie);

   return;
}

抱歉,我还是个新手,尝试了很多谷歌寻求帮助,但仍然不知道 :(

于 2019-07-22T07:29:03.820 回答
0

会话关联性通常使用名为 JSESSIONID 的 cookie。服务器负责在它发送给客户端的每个响应中设置此 cookie。客户端必须在其所有请求中发送此 cookie,以在服务器端保持会话亲和性。servlet 容器能够使用此 cookie 找到客户端的会话。

于 2019-07-22T06:47:09.353 回答