会话:用户打开了一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程称之为会话
有状态会话:记录曾经来过
一个网站怎么证明你来过
客户端 服务器
1,服务端给客户端一个信件,客户端下次访问服务端得时候带上信件即可;cookie
2,服务器登记你来过了,下次来得时候我来匹配你;
保存会话得两种技术如下:
Cookie
服务器给客户端cookie-->客户端请求的时候携带cookei(资源)
- 客户端技术(响应,请求)
- 一个cookie只能保存一个信息
- 一个web站点可以给浏览器发送多个cookie,最多存放20个cookie
- cookie大小有限制4kb
- 300个cookie浏览器上限
- 删除cookie
- 不设置有效期,关闭浏览器,自动失效
- 设置有效期时间为0
- cookie.setMaxAge(0);
Session(重点)
服务器给客户端sessionId(每个用户唯一)-->客户端拿到的是sessionId(钥匙),资源在session里面
- 服务器技术,利用这个技术可以保存用户得会话信息,可以把信息数据放到session
-
什么是session?
- 服务器会给每一个用户(浏览器)创建一个seesion
- 一个session独占一个浏览器,只要浏览器没有关闭,这个session就存在
- 场景:用户登录之后,整个网站就都可以访问了 --保存用户的信息,保存购物车信息
- 使用场景session:
- 保存用户登录信息,下 次不用再登录,可以直接进入
- 购物车信息
- 在整个网站中经常会使用得数据,保存到
- 删除session
- 手动删除
-
session.removeAttribute("name");//删掉其中一个元素
session.invalidate();//注销 之前的session会被删掉,但会立马生成一个新得
-
- web.xml里面设置自动失效时间
-
<!-- 设置sessionm默认得失效时间-->
<session-config>
<!-- 15分钟后session自动失效,以分钟为单位-->
<session-timeout>15</session-timeout>
</session-config>
-
- 手动删除
session和cookie区别
- cookie:
- 是把用户得数据,写给用户的浏览器,浏览器保存
- 不是很安全
- 单个保存得数据不能超过4k,大多浏览器限制一个站点最多只能由20个cookie
- session
- 把用户得数据些写到用户独占得session中,服务器端保存(保存重要信息,减少服务器资源浪费)
- 相对安全一点
- 储存于服务器,浏览器对其无影响
- session对象由服务创建
Cookie应用
1,从请求中拿到cookie信息
2,服务器相应给客户端cookie
Cookie[] cookies = req.getCookies();//获得cookie
cookie.getName()//拿到cookie的key
cookie.getValue()//拿到cookie的value
Cookie cookie = new Cookie("name",System.currentTimeMillis()+"");//新建一个cookie
cookie.setMaxAge(24*60*60);//设置保存最大时间,有效期关闭会话依然存在 24h 60min 60sec
resp.addCookie(cookie);//响应给客户端一个cookie
cookie:一般会保存再本地用户目录下appdata;
测试设置cookie案例
public class CookieDemo01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1,解决中文乱码问题
req.setCharacterEncoding("gbk");
resp.setCharacterEncoding("gbk");
//2,服务器端从客户端获取cooKie
Cookie[] cookies = req.getCookies();
PrintWriter out = resp.getWriter();
//3,判断是否为空
if(cookies != null){//不为空,拿到上次登录时间
for (Cookie cookie : cookies) {
if(cookie.getName().equals("name")){
out.println("你上一次得访问时间是:"+cookie.getValue());
}
}
}else {//为空设置登录时间
out.println("这是你第一次登录");
}
Cookie cookie = new Cookie("name",System.currentTimeMillis()+"");
cookie.setMaxAge(24*60*60);//设置保存最大时间,有效期关闭会话依然存在 24h 60min 60sec
resp.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
手动删除cookie案例
public class CookieDemo02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
Cookie cookie = new Cookie("name",System.currentTimeMillis()+"");
cookie.setMaxAge(0);
resp.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
如果传递中文遇到乱码
URLEncoder.encode("我们","UTF-8");//编码
URLDecoder.decode(cookie.getValue(),"UTF-8");//解码
Session应用(重点)
测试设置session案例
存string也可以存对象
public class SessionDemo01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
//解决乱码问题
req.setCharacterEncoding("gbk");
resp.setCharacterEncoding("gbk");
resp.setContentType("text/html;charset=utf-8");
//得到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);
}
//session在创建的时候做了什么事
// Cookie cookie = new Cookie("SESSIONID",sessionId);
// resp.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
doGet(req, resp);
}
}
//不同类去获取
public class SessionDemo02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
//解决乱码问题
req.setCharacterEncoding("gbk");
resp.setCharacterEncoding("gbk");
resp.setContentType("text/html;charset=utf-8");
//得到session
HttpSession session = req.getSession();
String name = (String) session.getAttribute("name");
resp.getWriter().write(name);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
doGet(req, resp);
}
}
手动删除session案例
public class SessionDemo03 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
//得到session
HttpSession session = req.getSession();
session.removeAttribute("name");//删掉其中一个元素
session.invalidate();//注销 之前的session会被删掉,但会立马生成一个新得
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
doGet(req, resp);
}
}
自动注销配置web.xml
<!-- 设置sessionm默认得失效时间-->
<session-config>
<!-- 15分钟后session自动失效,以分钟为单位-->
<session-timeout>15</session-timeout>
</session-config>
标签:web,浏览器,Session,resp,req,session,Cookie,cookie From: https://blog.csdn.net/m0_63789588/article/details/142484844