//总体而言,session更重要一些。
新建一个项目名为:javaweb-session-cookie。
三步
1、补全java和resources文件夹
2、更改web.xml中的版本控制信息。
3、补全pom.xml中的依赖信息,暂时只用servlet-api:
javax.servlet javax.servlet-api 4.0.1
本次maven还是可以删掉很多不用的东西,pom.xml中可以删到只剩下项目信息和打包方式。
cookie英文是饼干
session英文是会话,即用户在页面内点击很多链接获得资源的会话过程。会话分有有状态对话和无状态对话
cookie:服务器给客户端一个信物,客户端再来的时候带上信物就可以了。客户端保存信息的一种机制,也是实现session的一种方式。
是一种客户端技术(响应,请求)
session:服务器登记下客户端的特征,下次客户端再来直接匹配特征。
是一种服务器技术,利用这个技术,可以保存用户的会话信息
新建一个包com.sunsplanter.servlet,包下新建一个类cookieServletDemo01,我们先尝试保存用户上一次访问的时间,最通俗的方法是用IO流实现,但我们现在用cookie实现,代码如下:
public class cookieDemo01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//服务器告诉你你来的时间,把这个时间封装成为一个信件,下次带来就知道来了
//先解决中文乱码问题
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
PrintWriter out = resp.getWriter();//注意此处是命名为out
//cookie,服务器从客户端获取
cookie[] cookies = req.getcookies();
//取之前要判断cookie是否非空
if (cookies != null) {
//存在就取出
out.write("Last time you visited was");
for (int i = 0; i < cookies.length; i++) {
cookie cookie = cookies[i];
//获取cookie的名字
if (cookie.getName().equals("lastLoginTime")) {
//获取cookie中的值
long lastLoginTime = Long.parseLong(cookie.getValue());//用包装类long解析成长整型的数字
Date date = new Date(lastLoginTime);//用包装类Date将数字转成时间
out.write("date is:" + date.toLocaleString());
}
}
}
else {
out.write("This is first time you visit here.");
}
//上面全部走完没有访问过的话就给客户端新建一个cookie对象代表当前时间,
//上面全部走完访问过的话就给客户端更新这个cookie
//无论如何服务器都会给客户端响应过去现在的时间作为cookie
cookie cookie = new cookie("lastLoginTime", System.currentTimeMillis() + "");
resp.addcookie(cookie);
}
@Override
protected void doPost (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
配置servlet:
cookieDemo01 com.sunsplanter.servlet.cookieDemo01 cookieDemo01 /cookie
配置Tomcat运行后输入后缀cookie后发现显示的是
设置编码成utf-8后变成如下
然而之前并没有访问过,审查元素看看为啥 。
F12->application->cookies->localhost,里面可以看到设置的cookie
其中monitor-count是访问的次数。
观察network->cookie,可以看到响应头的setcookie。
关掉浏览器后再打开,发现cookie又被重置了,可以使用下面语句设置cookie有效期为一天,关掉重新进入cookie也不会失效。
cookie.setMaxAge(24*60*60);
这时发现响应头多了一个到期时间
GMT格林尼治时间+8h=UTC北京时间。
一个cookie只能保存一个信息
一个Web站点可以给浏览器发送多个cookie,但只能存放二十个。
cookie大小限制4kb。
浏览器上限300个cookie。
最后一个重点,如果想往cookie里存放中文字符串,最稳妥的办法是:
cookie cookie = new cookie("lastLoginTime", URLEncoder.encode("我是要存放的中文字符串","utf-8"));//编码
String s = URLDecoder.decode(cookie.getValue(),"utf-8");//解码
以后开发中遇到问题也可以尝试这样解决。



