目录
Cookie是一种会话跟踪机制。
Cookie对象不是JSP的内置对象,需要显示创建。
Cookie是WEB服务器通过浏览器在客户机的硬盘上存储的一小段文本。JSP可以将用户登录的用户名、密码、登录时间等信息保存在客户机的Cookie中。
当用户再次登录此网站时,浏览器根据用户输入的网址,在本地寻找与该网址匹配的Cookie,将该网站的Cookie和请求参数一起发送给服务器做处理,实现各种各样的个性化服务。
Cookie对象是javax.servlet.http.Cookie类的实例
JSP将信息存储在客户机Cookie的方法:
①使用构造方法声明一个Cookie对象
Cookie cookie = new Cookie("username", "Jack")
②通过response对象的addCookie()方法将该Cookie对象加入到response
response.addCookie(cookie)
JSP读取客户端Cookie信息的方法:
①request.getCookies()从request中读入Cookie对象数组
②再遍历该数组的各个cookie元素
Cookie存取中文时可能会出现乱码
保存时,需要对中文进行编码 java.net.URLEncoder.encode(String s, String enc)
读取时,需要对中文进行解码 java.net.URLDecoder.decode(String s, String enc)
这个转码需要导入java.net.*包
cookiesave.jsp
<%@ page language="java" import="java.net.*,java.text.*,java.util.*" contentType="text/html; charset=utf-8"%>
<html>
<head>
<title>Cookie-Save</title>
</head>
<body>
<%
Cookie cookie = new Cookie(URLEncoder.encode("姓名", "UTF-8"),URLEncoder.encode("杰克", "UTF-8"));
cookie.setMaxAge(60*60); //设定该cookie在用户机器硬盘上的存活期为1小时
response.addCookie(cookie);
String userIP = request.getRemoteAddr();
cookie = new Cookie("userIP",userIP);
cookie.setMaxAge(10*60);
response.addCookie(cookie);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日h:m:s");
Date date = new Date();
String logintime = sdf.format(date);
cookie = new Cookie("loginTime", URLEncoder.encode(logintime,"UTF-8"));
cookie.setMaxAge(20*60);
response.addCookie(cookie);
%><br>
<a href="cookieread.jsp">去读取Cookie</a>
</body>
</html>
cookieread.jsp
<%@ page language="java" import="java.net.*" contentType="text/html; chartset=utf-8" pageEncoding="utf-8"%>
<html>
<head>
<title>Cookie-Read</title>
</head>
<body>
使用foreach循环读取Cookie数组,并输出其中所有的cookie<br>
<%
if(request.getCookies() != null) {
for(Cookie cookie : request.getCookies()) {
String name = URLDecoder.decode(cookie.getName(), "UTF-8");
String value = URLDecoder.decode(cookie.getValue(), "UTF-8");
out.println("<br>cookie属性:"+name+"="+value);
}
}
%>
<p>使用for循环,查找某个cookie<br>
<%
Cookie myCookie[] = request.getCookies();
Cookie cookie = null;
for(int i=0;i<myCookie.length;i++) {
cookie = myCookie[i];
if(cookie.getName().equals("userIP")) {
%>
您好,您上次登录的IP地址是<%=cookie.getValue() %>!
<%} }%>
</body>
</html>
我们在浏览器中可以看到我们的cookie
也可以根据安全性的需求去设置是否允许在客户端生成cookie