javaweb:cookie和session

javaweb:cookie和session

  • 一丶cookie
    • 会话
    • 保存会话的两种技术
    • Cookie
  • 二丶session
    • session:
    • session和cookie的区别
    • 使用session

一丶cookie

会话

会话:用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程可以称之为会话。
有状态会话:服务器能记住客户端登记过,称之为有状态会话
cookies:服务器给客户端一个cookies,客户端下次访问服务端带上cookies就可以了
seesion:服务器登记过cookies,下次进入的时候匹配session和cookies

保存会话的两种技术

cookies:客户端技术(响应,请求)
session:服务器技术,利用这个技术可以保存用户的会话信息,可以把信息或者数据放在session中

常见场景:网站登录后第二次访问可以直接访问,无需登录。

Cookie

①从请求中拿到cookie
②服务器响应给客户端

cookie

Cookie[] cookies = req.getCookies();//获得cookie
Cookie.getName();//获得cookie中的key
Cookie.getValue();//获得cookie中的value
new Cookie("lastLoginTime",System.currentTimeMillis()+"");//新建一个cookie
Cookie.setMacAge(24*60*60);//设置cookie有效期
resp.addCookie(cookie);//响应给客户端一个cookie

cookie:一般保存在本地的用户目录下

一个网站的cookie是否存在上限?
A.一个cookie只能保存一个信息
B.一个web站点可以给浏览器发送多个cookie,最多存放20个cookie
C.Cookie大小有限制:4kb
D.300个cookie浏览器上限

删除cookie:
A.不设置有效期,关闭浏览器,自动失效
B.设置有效期时间为0

编码解码:

URLEncoder.encode(“中文值”,”utf-8);
URLDecoder.decode(cookie.getValue().”UTF-8);

test

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    //服务器告诉你来的时间,把这个时间封装成为一个新建,下次访问就知道上次访问的时间

    //解决中文乱码

    req.setCharacterEncoding("utf-8");
    resp.setContentType("text/html");
    resp.setCharacterEncoding("utf-8");

    PrintWriter out = resp.getWriter();

    //Cookies服务器端从客户端获取
    Cookie[] cookies = req.getCookies();//返回数组,说明cookies可能有多个

    //判断cookie是否存在
    if(cookies != null){
        //如果存在
        out.write("上一次访问的时间是:");
        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());
                Date date = new Date(lastLoginTime);
                out.write(date.toLocaleString());
                System.out.println(cookie.getValue());
            }
        }

    }else{
        out.write("第一次访问");
    }

    //服务器给客户端响应一个cookie
    Cookie cookie = new Cookie("lastLoginTime",System.currentTimeMillis()+"");
    //cookie有效期为一天
    cookie.setMaxAge(24*60*60);

    resp.addCookie(cookie);
}

在这里插入图片描述

二丶session

session:

①服务器会给每一个用户(浏览器)创建一个session对象
②一个session独占一个浏览器,只要浏览器没有关闭,这个session就存在
③用户登录后,整个网站都可以访问–>保存用户的信息,保存购物车的信息…

session和cookie的区别

①cookie是把用户的数据写给用户的浏览器,浏览器保存,可以保存多个
②session把用户的数据写到用户独占的session中,服务器端保存,保存重要信息,减少服务器资源浪费
③session对象由服务器创建

使用场景:
①保存一个登录用户的信息
②购物车信息
③在整个网站中经常会使用的数据,将他保存在session中

使用session

获取session

HttpSession session = req.getSession();

String name = (String) session.getAttribute("name");

手动注销session

session.invalidate();

会话自动过期


<session-config>
    
    <session-timeout>15session-timeout>
session-config>
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    //解决乱码问题
    req.setCharacterEncoding("UTF-8");
    resp.setCharacterEncoding("UTF-8");
    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("02F27DE4C26B5EED89AEF4CE7BF23ACB",sessionId);
    //resp.addCookie(cookie);

}

你可能感兴趣的:(javaweb)