Java:如何处理servlet中的多个会话

Java : How to deal with multiple sessions in the servlet

本问题已经有最佳答案,请猛点这里访问。

我是JavaEE的新手。我有一个需要用户登录的站点,用户登录后,我希望用户看到自己的项目(例如:购物车)。

这意味着我必须使用一个会话来完成这一点。但是我该如何处理多个会话呢?

例如,多个用户登录到系统以及同一个servlet?但是,我可以在一个servlet中保留多个会话吗?我要把他们每个人都记录下来吗?它是如何工作的?

有人能举个例子吗?


在servlet中,您可以访问HttpServletRequest,它为您提供了getSession()方法。这个方法返回会话对象(本质上是一个键值映射),对于每个用户来说是不同的。

如果您将某个东西放入该映射(如购物车),您可以稍后检索它——但仅当同一个用户再次访问该应用程序时(不一定是同一个servlet)。

1
2
3
4
5
6
7
public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws IOException, ServletException {

    HttpSession session = request.getSession();
    session.getAttribute("cart");
    //...
    session.setAttribute("cart", whateverYouWant);

会话在servlet容器中维护,并按会话ID(通常是cookie)查找。你不必自己实现任何东西。


是的,你可以。servlet容器将为您跟踪它们,因此您不必亲自进行簿记。可以从servlet代码中的HttpServletRequest中获取Session对象。因为您的代码一次只需要关注一个请求,所以在处理多个会话时通常不会有太大的麻烦。


要处理servlet中的多个用户登录,请为每个登录创建一个会话

1
HttpSession session = request.getSession();

public HttpSession getSession()返回与此请求关联的当前会话,或者如果请求没有会话,则创建一个会话。

每个会话将唯一地标识用户。

现在,如果用户希望更改数据库中的某些数据,那么在创建会话后,请使用该会话的信息设置属性,这些信息可以唯一地标识数据库中的用户,例如电子邮件u id为:

1
session.setAttribute("id",email_id of user);

稍后可以在另一个servlet/jsp中检索此属性,如下所示:

1
String email_id = session.getAttribute("id");

此属性将帮助识别向服务器发送更新数据库中数据或执行其他操作的请求的用户。有关会话的更多方法,请参阅链接:http://www.javatpoint.com/http-session-in-session-tracking