【问题标题】:Get cookie value in java在java中获取cookie值
【发布时间】:2014-05-13 07:41:34
【问题描述】:

我已经在我的 JSP 中像这样初始化了 Cooke,

String timeStamp = new SimpleDateFormat("dd:MM:yyyy_HH:mm:ss:SSS").format(Calendar.getInstance().getTime());
timeStamp = timeStamp + ":" + System.nanoTime();
String loc = "/u/poolla/workspace/FirstServlet/WebContent/WEB-INF/"+timeStamp;
Cookie thecookie = new Cookie("thecookie", loc);
thecookie.setMaxAge(60*60*24);
response.addCookie(thecookie);

因此,所有创建的 cookie 将具有相同的名称,但不同的用户访问时间的值不同。

在 java servlet 的结尾,我想停用/杀死在 java servlet 开头传递的 cookie,并说如果他们是 5 个用户并行使用系统,我将如何知道要为哪个用户停用哪个 cookie在 my.java 的最后一个?

例如,考虑

User 1 : cookie name `thecookie` value `AAA`
User 2 : cookie name `thecookie` value `BBB`
User 3 : cookie name `thecookie` value `CCC`
User 4 : cookie name `thecookie` value `DDD`
User 5 : cookie name `thecookie` value `EEE`

现在,在 my.java servlet 的末尾,我想停用在 my.java 开头分配的值为 CCC 的 cookie,而不干扰其他 cookie 值,该怎么做?

【问题讨论】:

  • 你的第二个问题不清楚。
  • 在我的编辑中解释。
  • Web 应用程序已经是多线程的。你为什么认为它会为 10 个用户显示 10 个 cookie?
  • 我没听懂,我刚开始使用 cookie
  • Getting cookie in servlet的可能重复

标签: java cookies


【解决方案1】:
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    String username = "";
    String password = "";
    // Get an array of Cookies associated with this domain
    Cookie[] cookies = request.getCookies();
    if (cookies != null) {
        for (int i = 0; i < cookies.length; i++) {
            if (cookies[i].getName().equals("username")) {
                username = cookies[i].getValue();
            }
            if (cookies[i].getName().equals("password")) {
                password = cookies[i].getValue();
            }
        }
    }
    AccountDAO l = new AccountDAO();
    Account a = l.getAll(username, password);
    if (a != null) {
        request.getRequestDispatcher("Detail.jsp").forward(request, response);
       
    } else {
        request.getRequestDispatcher("login.jsp").forward(request, response);
    }
}

【讨论】:

    【解决方案2】:
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        HttpSession session = request.getSession();
    
        AccountDAO db = new AccountDAO();
        Account ac = (Account) db.getAll(username, password);
    
        if (ac != null) {
            String remember = request.getParameter("remember");
            if (remember != null) {
                Cookie c_user = new Cookie("username", username);
                Cookie c_pass = new Cookie("password", password);
    
                c_user.setMaxAge(3600 * 24 * 30);
                c_pass.setMaxAge(3600 * 24 * 30);
    
                response.addCookie(c_user);
                response.addCookie(c_pass);
    
                session.setAttribute("display_name", ac.getDisplayName());
                request.getRequestDispatcher("Detail.jsp").forward(request, response);
            } else {
                session.setAttribute("display_name", ac.getDisplayName());
                request.getRequestDispatcher("Detail.jsp").forward(request, response);
            }
        } else {
            request.getRequestDispatcher("login.jsp").forward(request, response);
        }
    }
    

    【讨论】:

      【解决方案3】:

      在 kotlin 中会更短:

      fun HttpServletRequest.getCookie( name: String) = cookies.firstOrNull { it.name == name }
      
      

      【讨论】:

        【解决方案4】:

        准备使用泛型方法:

        public static Cookie getCookie(HttpServletRequest request, String name) {
            Cookie[] cookies = request.getCookies();
            if (cookies != null) {
                for (Cookie cookie : cookies) {
                    if (cookie.getName().equals(name)) {
                        return cookie;
                    }
                }
            }
            return null;
        }
        

        【讨论】:

          【解决方案5】:
          Cookie[] cookies = request.getCookies();
          int i = 0;
          for (Cookie cookie : cookies ) {
          
            Sytem.out.println(cookies[i].getName());
            Sytem.out.println(cookies[i].getValue());
          
            i++;
          }
          

          【讨论】:

            【解决方案6】:

            您使用了错误的方法来读取 cookie..

            Cookie[] cookies = request.getCookies();
            
            if (cookies != null) {
             for (Cookie cookie : cookies) {
               if (cookie.getName().equals("cookieName")) {
                 //do something
                 //value can be retrieved using #cookie.getValue()
                }
              }
            }
            

            使用这个。无需检测特定用户的 cookie,只需将其停用即可。

            【讨论】:

            • 您的意思是它会自动识别要停用的cookie??
            • 我无法在此方法中读取与字符串关联的特殊字符或数字?有什么限制吗?
            • 为高评价答案添加了 java 8:Arrays.stream(request.getCookies()).filter(t -> "cookieName".equals(t.getName())).findFirst() .get()
            • 这个答案中的request 是什么?如何定义?
            • @Kavipriya request 指的是HttpServletRequest
            猜你喜欢
            • 1970-01-01
            • 2012-07-05
            • 2019-08-23
            • 2016-01-12
            • 1970-01-01
            • 2012-06-01
            • 1970-01-01
            • 2016-02-03
            • 1970-01-01
            相关资源
            最近更新 更多