本文已参与「新人创作礼」活动,一起开启掘金创作之路
Cookie、Session
步骤
1.新建java 、resources
2.配置web.xml
3.配置pom.xml
1、会话
什么是会话呢?
我们先来用专业术语讲一下
在计算机术语中,会话是指一个终端用户与交互系统进行通讯的过程,比如从输入账户密码进入操作系统到退出操作系统就是一个会话过程。会话较多用于网络上,TCP的三次握手就创建了一个会话,TCP关闭连接就是关闭会话。
简单一点讲就是
用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程称为会话。
通俗一点讲就是
你打你女神的电话,你女神接了,说了没有两句,她就要去洗澡了,没等你反应过来,啪!电话挂了,虽然你不开心,但是这个过程,就叫做会话。再比如,你挑逗你的猫咪,想跟它玩,结果它也跟你互动,这也是会话,但是如果它不diao你,则不形成会话。(看不懂前面就看这个,这个再看不懂就给你女神打电话!!!)
有状态会话: 一个同学来过教室,下次再来,我们会知道这个同学曾经来过
你能怎么证明你和你女神一起看过电影?
你和你女神 电影院
- 电影院给你和你女神电影票
- 标记你来过了
一个网站,怎么证明你来过?
客户端 服务端
- 服务端给客户端一个cookie(信件),客户端下次访问服务端带上信件就可以
- 服务器登记你来过了,下次你来的时候我来匹配你
2 保存会话的两种技术
cookie
- 客户端技术(响应,请求)
session
- 服务器技术,利用这个技术,可以保存用户的会话信息,我们可以把信息或者数据放在session中
常见场景:网站登录之后,就不用再登录了,第二次访问直接上去
3 Cookie
- 从请求中拿到cookie信息
- 服务器响应给客户端cookie
Cookie[] cookies = req.getCookies();//获取cookie
cookie.getName(); //获取cookie中的key
cookie.getValue(); //获取cookie中的value
Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis()+"");//新建一个cookie
cookie.setMaxAge(24*60*60); //设置cookie的有效期
resp.addCookie(cookie);// 响应给客户端一个cookie
cookie:一般会保存在本地用户目录下apdata
一个网站cookie是否存在上限
- 一个cookie只能保存一个信息
- 一个web站点可以给浏览器发送多个cookie,最多存放20个cookie
- cookie大小有限制:4kb
- 300个cookie浏览器上限
删除cookie
- 不设置有效期,关闭有效期,自动删除
- 设置有效期为0
4 Session(重点)
什么是session:
- 服务器会给每一个用户(浏览器)创建一个session对象
- 一个session独占一个浏览器,只要浏览器没有关闭,这个session就一直存在
- 用户登录之后,整个网站它都可以访问 保存用户的信息;保存购物车的信息
session和cookie 的区别
- cookie是把用户的数据写给用户的浏览器,浏览器保存(可以保存多个)
- session把用户的数据写到用户独占的session中,服务器端保存(保存重要信息,减少服务器资源的浪费)
- session对象由服务器创建
session使用场景:
- 保存一个登录用户的信息
- 购物车信息
- 在整个网站中经常会使用的数据,保存在session中
使用session:
public class SessionDemo01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决乱码问题
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html");
//得到Session
HttpSession session = req.getSession();
//给session中存东西
session.setAttribute("name","传奇");
//获取session的ID
String sessionId = session.getId();
//判断session是不是新创建
if (session.isNew()){
resp.getWriter().write("session创建成功,ID"+ sessionId);
}else {
resp.getWriter().write("session已经在服务器中存在了,ID"+sessionId);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
}
}
//手动注销
session.invalidate
会话自动过期:web.xml配置
<!-- 设置session默认的失效时间-->
<session-config>
<!-- 15分钟后session自动失效,以分钟为单位-->
<session-timeout>15</session-timeout>
</session-config>