@[toc]
一.Javaweb Cookie
1.1 会话
用户打开浏览器,单击多个超链接,访问多个web资源,然后关闭浏览器的过程叫做会话。
1.2 Cookie和Session的区别
Cookie:服务端给了客户端一个标头,客户端下次访问带上标头即可,在本地保存。
Session:服务器登记本机访问记录,下次访问服务器匹配数据库数据。
1.3 保存会话的俩种技术
Cookie
- 客户端的技术,主要有响应和请求
Session
- 服务器端的技术,利用这个技术,可以保存用户的会话记录。
- 可以把信息和数据保存在session里。
二.对于Cookie记录实战
1.新建立maven工程,工程名为:servlet-session-chookie。
2.新建java目录为,存放项目的目录路径。
3.新建接口,接口名为:com.gowork.servlet。
4.在com.gowork.servlet接口下新建类,类名为CookieDemo1。
5.继承类HttpServlet,重写doGet方法,doPost指向doGet。
6.提前设置编码类型,请求和我响应:
req.setCharacterEncoding("utf-8"); resp.setCharacterEncoding("utf-8");7.chookie服务端想客户端获取。
Cookie[] cookies = req.getCookies();8.服务器每次访问,获取一次时间存储。
Cookie cookie = new Cookie("lasttime", System.currentTimeMillis() + ""); resp.addCookie(cookie);9.如果第7步的cookies不为空的话。输出上一次访问的时间的提示语句。
遍历cookies,获取cookies名称为低8步骤的lasttime的值,进行响应个前端。
for(int i=0;i < cookies.length; i++){ Cookie cookie = cookies[i]; if(cookie.getName().equals("lasttime") ){ cookie.getValue(); long l = Long.parseLong(cookie.getValue()); Date date = new Date(l); out.write(date.toLocaleString()); }10.如果第8步的cookies为空的话,输出:第一次访问。
并且下面的cookie继续执行,获取到当前时间存储到用户本地的chooice里,名称为“:lasttime,看上面的第八步。
11.配置注册url,写url的映射。
<servlet> <servlet-name>cookie</servlet-name> <servlet-class>com.gowork.servlet.CookieDemo1</servlet-class> </servlet> <servlet-mapping> <servlet-name>cookie</servlet-name> <url-pattern>/co5</url-pattern> </servlet-mapping>12.设置tomact的访问路径。
C:\Users\24190\IdeaProjects\xiao\servletr-session-chookie\src\main\webapp
13.启动tomact服务器。访问路径:
localhost:8080/servletr-session-chookie/co5
14.访问效果图如下:
第一次访问:
多次访问;
15.设置cookie的有效期:
cookie.setMaxAge(24*60*60);运行项目,打开F12,查看网络,发现有效期为一天。
Set-Cookie: lasttime=1661136845468; Max-Age=86400; Expires=Tue, 23-Aug-2022 02:54:05 GM2.1 cookie常用合集
获取cookie:
Cookie[] cookies = req.getCookies();获取cookie的key和value:
cookie.getName() cookie.getValue()新建一个cookie:
Cookie cookie = new Cookie("lasttime", System.currentTimeMillis() + "");设置cookie的有效期:
cookie.setMaxAge(24*60*60)响应个客户端一个cookie:
resp.addCookie(cookie);2.2 细节问题
- 一个cookie只能保存一条信息;
- 一个网站可以向浏览器发送多个cookie,并最多存储20个cookie;
- Cookie大小限制为4KB;
- 300个Cookie浏览器限制;
删除cookie:
- 不设置有效期,关闭浏览器,自动失效
- 设置有效期,超出有效期,cookie失效
- 设置有效期时间为0
2.3 删除一个cookie
1.创建一个cookie的类,类名为:CookieDemo2
2.继承HttpServlet,重写doGet方法,doPost方法指向于doGet。
3.创建一个cookie,名称要与被删除的cookie相同。
Cookie cookie = new Cookie("lasttime", System.currentTimeMillis() + "");4.设置cookie的有效期为0:
cookie.setMaxAge(0);5.响应回客户端。
```java\resp.addCookie(cookie);
6.注册url,写映射: ```xml <servlet> <servlet-name>cookie02</servlet-name> <servlet-class>com.gowork.servlet.CookieDemo2</servlet-class> </servlet> <servlet-mapping> <servlet-name>cookie02</servlet-name> <url-pattern>/co2</url-pattern> </servlet-mapping>7.启动web容器,访问url观察:
第二次访问:co5:
访问co2,删除cookie:
再次访问co5:
结果发现cookie被删除,变为第一次访问!
2.4 编码解码
在前后端传输过程请中,对中文传输容易造成乱码问题。这里用到网络编程的知识点,编码与解码:
编码:
Cookie cookie = new Cookie("name", URLEncoder.encode("菜猪", StandardCharsets.UTF_8));解码:
out.write(URLDecoder.decode(cookie.getValue(), StandardCharsets.UTF_8));编码解码效果成功图如下:
这样传输更加安全,有效的避免了中文乱码问题。