1,问题:因为http协议是无状态的,所以当用户的页面发生刷新或者跳转的时候,用户的信息就不会被保存下来,比如说你在页面1点击购买了一个商品,但是由于http的无状态性,当你点击付款的时候,进入页面,但是浏览器已经不记得你买的是什么商品了
2,解决:这时候cookie就能帮上忙了,cookie由服务端生成,能够一直保存在客户端,从而每次用户发出请求的时候,服务器就能获取到用户上次的状态了。
3,java中的实现:
下面这段是服务器端的代码,当你发送发送一个请求到这个jsp页面的时候,服务器端就会将你的数据放在一个cookie中,之后响应给客户端,客户端就能够将这个cookie保存起来,这个过程中,又会牵扯到cookie的生命期这个问题,我们可以通过setMaxAge(int time)
这个方法来限制客户端cookie生存的时长,参数 time单位是秒
- time>0,表示cookie保存在浏览器端硬盘里time长的时间
- time=0,表示立即销毁浏览器中指定的cookie
- time<0,是默认情况,cookie保存在内存中,浏览器关闭也就销毁了
<%--
Created by IntelliJ IDEA.
User: zed
Date: 2016/3/16
Time: 20:15
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title></title>
</head>
<body>
<%
//生成cookie,响应给客户端
System.out.println("生成cookie");
Cookie cookie1 = new Cookie("aaa","AAA");
cookie1.setMaxAge(60*60);//保存在硬盘1分钟
response.addCookie(cookie1);
Cookie cookie2 = new Cookie("bbb","BBB");
response.addCookie(cookie2);
%>
</body>
</html>
<%--
Created by IntelliJ IDEA.
User: zed
Date: 2016/3/16
Time: 20:15
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title></title>
</head>
<body>
<%
//获取了浏览器中的cookie
String username="zhangsan";
Cookie[] cookies = request.getCookies();
if(cookies!=null&&cookies.length>0){
for(Cookie c:cookies){
if(c.getName().equals("username")){
username = c.getValue();
}
}
}
%>
</body>
</html>