服务器在客户端保存用户的信息,比如登录名、密码……就是cookie。
这些信息就像是小甜饼一样,数据量并不大,服务器端在需要的时候可以从客户端读取。
cookie可以用来做什么?
1.保存用户名、密码,在一定时间不用重新登录
2.记录用户访问网站的喜好,比如有无背景音乐、网页的背景色是什么
3.网站的个性化,比如定制网站的服务、内容
cookie使用:
1.cookie有点像一张表,分两列,一个是名字,一个是值,数据类型都是String
2.如何创建一个cookie(在服务器端创建的)
Cookie c=new Cookie(String name, String val);
3.如何将一个cookie添加到客户端
response.addCookie(c);
4。如何读取cookie(从客户端读到服务器)
request.getCookie();
Cookie练习1:创建Cookie
import javax.servlet.http.*;
import java.io.*;
public class Cookie1 extends HttpServlet{
public void doGet(HttpServletRequest req,HttpServletResponse res){
try {
res.setContentType("text/html;charset=gbk");
PrintWriter pw=res.getWriter();
//当用户访问该servlet时, 就将信息创建到该用户的cookie中
//1. 先在服务器端创建一个cookie
Cookie myCookie=new Cookie("color1","red");
//2. 该cookie存在的时间
myCookie.setMaxAge(30);
/如果你不设置存在时间,那么该cookie将不会保存
//3. 将该cookie写回到客户端
res.addCookie(myCookie);
pw.println("creat cookie");
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
执行结果:
查找Cookies文件夹,确定是否将cookie写回到客户端。
Cookies文件夹位置为:C:\Documents and Settings\Administrator\Cookies
administrator为你的windows用户名
如果没有看到Cookies文件夹,则需要显示隐藏的文件夹
选择工具→文件夹选项→查看 将隐藏受保护的操作系统文件前面的复选框去掉
就可以看见Cookies文件夹了,找到生成的对应cookie
练习2、读取Cookie
import javax.servlet.http.*;
import java.io.*;
public class Cookie2 extends HttpServlet{
public void doGet(HttpServletRequest req,HttpServletResponse res){
try {
PrintWriter pw=res.getWriter();
//从客户端得到所有cookie信息
Cookie[] allCookies=req.getCookies();
//如果客户端存在cookie信息
if(allCookies!=null)
{
//遍历所有cookie信息,找到刚刚创建的cookie
for(i=0;i<allCookies.length;i++)
{
Cookie temp=allCookies[i];
if(temp.getName().equals("color1"))
{
String val=temp.getValue();
pw.println("color1="+val);
break;
}
}
//如果遍历完也没有找到,则cookie过期啦
if(allCookies.length==i)
{
pw.println("cookie time out");
}
}
else //allCookies==null
{
pw.println("Don't have cookies");
}
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
执行结果:
刷新练习1的url,产生cookie,输入练习2的url,产生结果如图所示:
30秒cookie过期之后刷新页面,产生结果如图所示:
3、删除Cookie
import javax.servlet.http.*;
import java.io.*;
public class Cookie3 extends HttpServlet{
public void doGet(HttpServletRequest req,HttpServletResponse res){
try {
res.setContentType("text/html;charset=gbk");
PrintWriter pw=res.getWriter();
Cookie[] allCookies=req.getCookies();
int i=0;
if(allCookies!=null)
{
for(i=0;i<allCookies.length;i++)
{ Cookie temp=allCookies[i];
if(temp.getName().equals("color1"))
{
temp.setMaxAge(0); //为正数表示cookie保存时间,为0表示删除cookie,为负数表示不保存cookie
pw.println("delete cookie");
break;
}
}
}
else
{
pw.println("Don't have cookies");
}
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
执行结果:
Cookie的其他说明:
1.可以通过IE——工具——internet选项——隐私——高级来启用或是禁用cookie
2.由于cookie的信息是保存在客户端的,因此安全性不高
3.cookie信息的生命周期可以在创建时设置(比如30s),从创建那一时刻起,就开始计时,到时该cookie的信息就无效了