Cookies和Servlet
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或者特定于用户的设置。