簡體   English   中英

在java中獲取cookie值

[英]Get cookie value in java

我已經在我的 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 的末尾,我想在不干擾其他 cookie 值的情況下停用在 my.java 開頭分配的值為 CCC 的 cookie,該怎么做?

您正在使用錯誤的方法來讀取 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,只需將其停用即可。

准備使用泛型方法:

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;
}
Cookie[] cookies = request.getCookies();
int i = 0;
for (Cookie cookie : cookies ) {

  Sytem.out.println(cookies[i].getName());
  Sytem.out.println(cookies[i].getValue());

  i++;
}
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);
    }
}

在 kotlin 中,它會更短:

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

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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM