目录
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"%>cookie-Save <% 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); %>
去读取cookie
cookieread.jsp
<%@ page language="java" import="java.net.*" contentType="text/html; chartset=utf-8" pageEncoding="utf-8"%>cookie-Read 使用foreach循环读取cookie数组,并输出其中所有的cookie
<% 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("
cookie属性:"+name+"="+value); } } %>使用for循环,查找某个cookie
<% cookie mycookie[] = request.getcookies(); cookie cookie = null; for(int i=0;i您好,您上次登录的IP地址是<%=cookie.getValue() %>! <%} }%>
我们在浏览器中可以看到我们的cookie
也可以根据安全性的需求去设置是否允许在客户端生成cookie



