java

位置:IT落伍者 >> java >> 浏览文章

java中cookie操作详细


发布日期:2023年03月30日
 
java中cookie操作详细

设置Cookie

代码如下
Cookie cookie = new Cookie("key" "value");

cookiesetMaxAge();

设置秒生存期如果设置为负值的话则为浏览器进程Cookie(内存中保存)关闭浏览器就失效

代码如下

cookiesetPath("/test/test");

设置Cookie路径不设置的话为当前路径(对于Servlet来说为requestgetContextPath() + webxml里配置的该Servlet的urlpattern路径部分)

代码如下
responseaddCookie(cookie);

读取Cookie

该方法可以读取当前路径以及“直接父路径”的所有Cookie对象如果没有任何Cookie的话则返回null

代码如下

Cookie[] cookies = requestgetCookies();

删除Cookie

代码如下
Cookie cookie = new Cookie("key" null);

cookiesetMaxAge();

设置为为立即删除该Cookie

代码如下
cookiesetPath("/test/test");

删除指定路径上的Cookie不设置该路径默认为删除当前路径Cookie

代码如下 responseaddCookie(cookie);

下面用一个完整的实例来说明

代码如下
<%@ page contentType="text/html; charset=utf" language="java" import="javasql*" errorPage="" %>
<!DOCTYPE html PUBLIC "//WC//DTD XHTML Transitional//EN" "
<html xmlns="
<head>
<meta httpequiv="ContentType" content="text/html; charset=utf" />
<title></title>
</head>

<body>
<%
String username = null;
Cookie[] cookies = requestgetCookies();
if(cookies!=null)
{
for(int i=;i<cookieslength;i++)
{
if("cookies_user"equals(cookies[i]getName()))
{
username = cookies[i]getValue();//cookies_user}
}

if("onepc"equals(username))
{
outprintln("Hello");
}else
{
%>

<table width="" border="">
<form id="form" name="form" method="post" action="cloginjsp">
<tr>

<td width=""><div align="center"></div></td>
<td width=""><input type="text" name="user" id="user" /></td>
</tr>
<tr>
<td><div align="center"></div></td>
<td><input type="text" name="textfield" id="textfield" /></td>
</tr>
<tr>
<td><div align="center">
</div></td>
<td><select name="select" id="select">
<option value="">one year</option>
<option value="">two min</option>
</select></td>
</tr>
<tr>
<td colspan=""><label>
<input type="submit" name="button" id="button" value="" />
</label></td>

</tr>
</form>
</table>

<%
}

}

%>


</body>
</html>


loginjsp

代码如下

<%
String user = requestgetParameter("user");
Cookie cookie = new Cookie("cookies_user"user);
cookiesetMaxAge();
responseaddCookie(cookie);
responsesendRedirect("cindexjsp");

%>


注意假设路径结构如下

代码如下
test/test/test/test/test

a相同键名的Cookie(值可以相同或不同)可以存在于不同的路径下

b 删除时如果当前路径下没有键为"key"的Cookie则查询全部父路径检索到就执行删除操作(每次只能删除一个与自己最近的父路径Cookie) FF必须指定与设定cookie时使用的相同路径来删除改cookie而且cookie的键名不论大写小写或大小混合都要指定路径IE键名小写时如果当前路径为/test/test如果找不到再向上查询/test/test/test如果还找不到就查询/(/test/test不查询) 键名大小写混合或大写时不指定路径则默认删除当前路径并且不向上查询

c读取Cookie时只能读取直接父路径的Cookie如果当前路径为/test/test要读取的键为“key”当前路径读取后还要读取/test/test读取后还要读取/

d在做Java的web项目时由于一般的Web服务器(如Tomcat或Jetty)都用Context来管理不同的Web Application这样对于每个Context有不同的Path在一个Server中有多个Web Application时要特别小心不要设置Path为/的Cookie容易误操作(当然前提是域名相同)

               

上一篇:高性能高弹性JSP和Servlet性能优化

下一篇:浅析javax.servlet.Servlet,ServletContext接口