Cookie
保存用户状态的机制
- session
- cookie
Cookie介绍:
称为“小甜饼”,是Web服务器中保存在客户端的一系列文本信息
应用:
- 典型应用1:判断注册用户是否已经登入网站
- 典型应用2:“购物车”的处理
作用:
1.对特定对象的追踪
2.保存用户网页浏览记录与习惯
3.简化登入
风险:容易泄漏用户信息
一、cookie的创建与使用
创建cookie步骤
创建Cookie对象:
Cookie newCookie=new Cookie(String key,Object value);
写入Cookie对象:
response.addCookie(newCookie);
读取Cookie对象:
Cookie[ ] cookies=request.getCookie( );
获取cookie
通过request.getCookies()方法获取cookie的内容,cookie的内容是数组
<!--获取cookie-->
Cookie[] cookies = request.getCookies();
<!--循环遍历输出cookies-->
for(Cookie c:cookies){
system.out.println(c.getName()+" ,"+c.getValue());
}
常用方法
setMaxAge(int expiry);//设置Cookie有效时间,以秒为单位
getMaxAge();//获取cookie的有效时间,以秒为单位
setValue(String value);//在cookie创建后,对cookie进行赋值
getValue();//获取cookie的值
getName();//获取cookie的名称
二、使用cookie实现登入记录的例子
1.创建login.jsp
<%@ page language="java" import="java.util.*,java.net.*" pageEncoding="UTF-8"%>
<body>
//登入勾选cookie后将用户名和密码保留在登入框中
<%
String username="";
String password="";
Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0) {
for (Cookie c : cookies) {
if (c.getName().equals("username")) {
username=URLDecoder.decode(c.getValue(), "utf-8");
}
if(c.getName().equals("password")){
password=URLDecoder.decode(c.getValue(), "utf-8");
}
}
}
%>
<form action="dologin.jsp" method="post">
用户:<input type="text" name="username" value="<%=username %>">
<br>
密码:<input type="password" name="password" value="<%=password %>">
<br>
<br>
<input type="checkbox" checked="checked" name="usecookie">十天内记住我的登录状态
<br>
<input type="submit" value="登入">
</form>
</body>
2.创建dologin.jsp
<body>
<%request.setCharacterEncoding("utf-8"); %>
<%
String[] cookie = request.getParameterValues("usecookie");
if (cookie != null && cookie.length>0) {
//获取表单用户名和密码,URLEcoder编码cookie的中文字符串为UTF-8
String username = URLEncoder.encode(request.getParameter("username"),"utf-8");
String password = URLEncoder.encode(request.getParameter("password"),"utf-8");
//将信息保存在cookie中
Cookie usernameCookie = new Cookie("username", username);
Cookie passwordCookie = new Cookie("password", password);
//设置Cookie的有效时间
usernameCookie.setMaxAge(864000);
passwordCookie.setMaxAge(864000);
response.addCookie(usernameCookie);
response.addCookie(passwordCookie);
} else {
//获取cookie的内容
Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0) {
//循环遍历查找cookie中的username和password
for (Cookie c : cookies) {
//如果c.getName()获取cookie的名称和username
if (c.getName().equals("username")|| c.getName().equals("password")) {
c.setMaxAge(0);//将生命期限设置成0秒失效
response.addCookie(c);//将c保存在cookie
}
}
}
}
%>
<a href="user.jsp">查看用户信息</a>
</body>
3.创建user.jsp
<body>
<%
request.setCharacterEncoding("utf-8");
String username="";
String password="";
Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0) {
for (Cookie c : cookies) {
if (c.getName().equals("username")) {
//URLDecoder方法解码成ut-8
username=URLDecoder.decode(c.getValue(),"utf-8");
}
if(c.getName().equals("password")){
password=URLDecoder.decode(c.getValue(),"utf-8");
}
}
}
%>
用户名:<%=username %>
密码:<%=password %>
</body>
三、session和cookie对比
session | cookie |
---|---|
在服务器端保存用户信息 | 在客户端保存用户信息 |
session中保存的是Object类型 | cookie保存的是String |
随会话的结束而将其存储的数据销毁 | cookie可以长期保存客户端 |
保存重要信息 | 保存不重要的用户信息 |