浅谈cookie技术
Javaweb编程中有一种方法称之为Cookie,在百度百科中,这样给cookie下定义:
Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。
根据以上内容,也不难理解。cookie原意是“小饼干”,这又跟小饼干有什么关系呢?cookie还有一项含义是“网络饼干”,网络饼干(网络或互联网使用者发给中央服务器信息的计算机文件),这样就好理解了。
也可以将cookie理解为一封信件:某客户端第一次访问服务器时,服务器写了一封信给客户端(信上的内容是访问时间、访问对象等等),等到客户端下一次来访问服务器时,客户端就会带着这封信,这样服务器就知道这个客户端上次来过了,并且很清楚地了解上次访问的具体时间,本次访问结束之后,服务器又把这封信拿过来,更新为本次访问的信息。简单说,就是这样的一个过程。
cookie是一种客户端技术!
示例
简单编写一个cookie的应用:
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
//保存用户上一次访问的时间
public class CookieDemo01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决中文乱码问题
req.setCharacterEncoding("GBK");
resp.setCharacterEncoding("GBK");
PrintWriter out = resp.getWriter();
//服务器端从客户端获取cookie
Cookie[] cookies = req.getCookies();
//判断cookie是否存在
if (cookies!=null){
out.write("您上次访问本网站的时间是:");
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
String cookieName = cookie.getName(); //获取cookie的名字
if (cookieName.equals("LastLoginTime")){
long llt = Long.parseLong(cookie.getValue()); //获取cookie中的值
Date date = new Date(llt);
out.write(date.toLocaleString());
}
}
}else {
out.write("这是您第一次访问本站!");
}
//服务器给客户端响应一个cookie,覆盖上次的数据
Cookie lastLoginTime = new Cookie("LastLoginTime", System.currentTimeMillis()+"");
resp.addCookie(lastLoginTime);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
用于清除cookie的类(将cookie的有效期设置为0即可):
package psl.wong.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
//保存用户上一次访问的时间
public class CookieDemo02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie lastLoginTime = new Cookie("LastLoginTime", System.currentTimeMillis() + "");
lastLoginTime.setMaxAge(0); //关键代码
PrintWriter writer = resp.getWriter();
writer.write("This cookie has deleted!");
resp.addCookie(lastLoginTime);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
web.xml的注册:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">
<servlet>
<servlet-name>CookieDemo01</servlet-name>
<servlet-class>psl.wong.servlet.CookieDemo01</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CookieDemo01</servlet-name>
<url-pattern>/login1</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>CookieDemo02</servlet-name>
<servlet-class>psl.wong.servlet.CookieDemo02</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CookieDemo02</servlet-name>
<url-pattern>/login2</url-pattern>
</servlet-mapping>
</web-app>