Cookies和Servlet

时间:2020-01-09 10:36:21  来源:igfitidea点击:

HTTP Cookies是Web应用程序可以存储在访问Web应用程序的用户的客户端计算机上的少量数据。通常最多4千字节的数据。本文将说明如何在Java Servlet(或者JSP)内部设置,读取和删除cookie。

Java Cookie示例

我们可以使用HttpServletResponse对象编写cookie,如下所示:

Cookie cookie = new Cookie("myCookie", "myCookieValue");

response.addCookie(cookie);

如我们所见,该cookie由名称" myCookie"标识,并具有值" myCookieValue"。因此,我们可以添加具有不同标识(名称)的许多不同的Cookie。有点像哈希表。

每当浏览器访问Web应用程序时,浏览器都会将存储在客户端计算机上的Cookie提交到Web应用程序。仅提交由访问的Web应用程序存储的cookie。来自其他Web应用程序的Cookie不会提交。

读取从浏览器发送的Cookie

我们可以通过HttpServletRequest读取cookie,如下所示:

Cookie[] cookies = request.getCookies();

注意:getCookies()方法可能返回空值!

现在,我们可以遍历cookie数组并找到所需的cookie。不幸的是,无法获得具有特定名称的cookie。再次找到该cookie的唯一方法是迭代Cookie []数组并检查每个cookie名称。这是一个例子:

Cookie[] cookies = request.getCookies();

String userId = null;
for(Cookie cookie : cookies){
    if("uid".equals(cookie.getName())){
        userId = cookie.getValue();
    }
}

本示例查找名称为" uid"的cookie,并将其值存储在"

如果我们需要访问多个cookie,则可以一次迭代Cookie []数组,然后将cookie名称作为键,将Cookie实例作为值,将Cookie实例放入Map中。 。看起来是这样的:

Map<String, Cookie> cookieMap = new HashMap<String, Cookie>();
Cookie[] cookies = request.getCookies();

for(Cookie cookie : cookies){
    cookieMap.put(cookie.getName(), cookie);
}

执行完此代码后,我们现在可以使用cookie名称作为键(cookieMap.get(" cookieName"))访问cookieMap中的cookie。

Cookie过期

Cookie的一项重要设置是Cookie的到期时间。这次告诉接收Cookie的浏览器在删除Cookie之前应保留cookie多长时间。

我们可以通过setMaxAge()方法设置cookie的过期时间。此方法将cookie保留的秒数作为参数。这是一个例子:

Cookie cookie = new Cookie("uid", "123");

cookie.setMaxAge(24 * 60 * 60);  // 24 hours. 

response.addCookie(cookie);

此示例首先创建一个名称为" uid"且值为" 123"的" Cookie"实例。其次,它使用setMaxAge()方法将到期时间设置为24小时。 24小时是60秒x 60分钟x 24小时(24 x 60 x 60)。最后,该示例在" HttpServletResponse"对象上设置cookie,因此该cookie包含在发送给浏览器的响应中。

删除Cookie

有时我们可能想从浏览器中删除cookie。我们可以通过设置Cookie的有效时间来实现。我们可以将到期时间设置为" 0"或者" -1"。如果将过期时间设置为" 0",则cookie将立即从浏览器中删除。如果将过期时间设置为" -1",则在浏览器关闭时,该cookie将被删除。

这是一个例子:

Cookie cookie = new Cookie("uid", "");

cookie.setMaxAge(0); 

response.addCookie(cookie);

如果浏览器已经存储了一个名称为" uid"的cookie,则在收到具有相同名称(" uid")的cookie且其有效时间为" 0"后将其删除。如果浏览器尚未存储cookie,则由于其过期时间为" 0",因此将立即抛出该新cookie。

其他Cookie设置

Cookie除了有效期外,还具有其他可以修改和访问的其他设置。查看Cookie类JavaDoc了解更多详细信息。

Cookie用例

Cookies最常用于存储用户特定的信息,例如我们不想存储在Web应用程序数据库中(如果有的话)的唯一用户ID(用于未登录的匿名用户),会话ID或者特定于用户的设置。