同学问我关于cookie的问题,大致知道他的原理,但不知道它内部到底如何存储的。所以写个小程序测试一下:
简单的登录验证,保存用户名和密码以后不用登陆:
在index.jsp下,填写用户名和密码,勾选保存信息。在服务器端检查是否勾选上,然后生成cookie保存到客户端:
index.jsp代码如下:
<form method="post" action="register.jsp">
username:
<input type="text" name="username" />
</BR>
password:
<input type="password" name="password" />
</br>
<input type="checkbox" name="remember">
save
</input>
<input type="submit" value="提交" />
</form>
register.jsp代码如下:
<%
String username = request.getParameter("username");
String password = request.getParameter("password");
String remember = request.getParameter("remember");
if (remember == null || "".equals(remember.trim())) {
out.print("empty info");
return;
}
Cookie c1 = new Cookie("username", username);
Cookie c2 = new Cookie("password",password);
response.addCookie(c1);
response.addCookie(c2);
c1.setMaxAge(22222); //这是cookie保存的时间,我在这里随便敲了个数字
c2.setMaxAge(2234343);
out.println("save it");
%>
测试页test.jsp
<%
String username = null;
String password = null;
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if(cookie.getName().equals("username")){
username = cookie.getValue();
}else if(cookie.getName().equals("password")){
password = cookie.getValue();
}
}
if (username != null && password != null){
out.println("logined");
}
%>
我使用的IE6进行测试,他的cookie保存路径为:C:\Documents and Settings\登录用户名\Cookies
由于是本机测试,所以他的cookie文件名为:administrator@cookie[2].txt。打开后查看内容为:
username
aa
localhost/cookie/
1024
513019904
30000551
1642879296
30000499
*
password
aa
localhost/cookie/
1024
2641445504
30005701
1642879296
30000499
*
分析:
我在index.jsp上输入了用户名和密码,在服务器端创建了两个cookie对象,但浏览器针对每个站点只会生成一个cookie文件。在服务器端,通过reques对象获得cookie对象,对其进行迭代,依次取出其中保存的值,进行相关操作就可以了。
对不同目录下,保存cookie会生成不同的cookie文件。
比如我在webRoot/jsp/saveCookie.jsp里保存cookie那么保存的cookie对应的域会是localhost/cookie/jsp
可以使用cookie的setDomain方法,指定cookie的域。