JavaWeb知识小汇(8)——Cookie和Session

Cookie和Session

会话:打开浏览器直到一次关闭浏览器,叫一次会话

保存会话的两种技术

cookie

客户端技术 (响应,请求)

session

服务端技术 利用此技术可以保存客户的会话信息,可以将信息和数据放在session中

Cookie

cookie是由服务端生成的由客户端保存,相当由本地缓存。

方法

Cookie[] cookies = req.getCookies();//获取cookie
cookie.getName()//获取cookie的key
cookie.getValue()//获取cookie的value
Cookie cookie = new Cookie(String, String);//创建一个新的cookie    
cookie.setMaxAge();//设置cookie的有效期 
resp.addCookie(Cookie);//添加cookie    
@WebServlet("/cookie")
public class CookieServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html");
        PrintWriter out = resp.getWriter();
        Cookie[] cookies = req.getCookies();//获取cookie
        if (cookies != null){
            out.println("上次访问时间");
            for (Cookie cookie: cookies){
                if (cookie.getName().equals("time")){//获取cookie的key
                    long aLong = Long.parseLong(cookie.getValue());//获取cookie的value
                    Date date = new Date(aLong);
                    out.println(date.toLocaleString());
                }
            }
        }else {
            out.println("首次访问");
        }

        Cookie cookie = new Cookie("time", System.currentTimeMillis() + "");//创建一个新的cookie
        //cookie有效期为一天
        cookie.setMaxAge(24*60*60);//设置cookie的有效期
        resp.addCookie(cookie);//添加cookie
    }
}

一个cookie存在的上限:

​ 一个cookie只能存一个信息

​ 一个web网站可以给浏览器发送多个cookie,最多存放20个cookie

​ cookie大小限制4kb

​ 浏览器cookie上限300个

删除cookie:

​ 不设置有效期,关闭浏览器cookie自动删除

​ 设置有效期为0

编码解码

URLDecoder.decode(c.getValue(), "UTF-8")//解码
 URLEncoder.encode("中国", "UTF-8")//编码
Session(重点)

cookie和session如何进行匹配?

​ 当客户端去访问服务器,此时会产生一个session对象,会有一个自带的sessionID,将sessionID复制一份,给JESSIONID,将 JESSIONID放入带cookie中。

​ 客户端的JESSIONID和服务端的sessionID一一对应,用于区分客户。

什么是session?

​ 服务器会为每一个用户(浏览器)创建一个Session对象。

​ 一个session独占一个浏览器,只要浏览器没有关闭,这个session就会存在。

​ 用户登录以后,整个网站都可以访问。

cookie和session的区别

cookie把数据存储在客户端(可以保存多个),session将数据存储在服务器(保存重要的信息,减少服务器资源的浪费)

session使用场景

保存一个登录用户信息

购物车信息

整个网站中经常会使用的数据,将其存在session中

销毁session的方法

<!--web.xml-->
<session-config>
    <!--    设置超时时间   10分钟后自动销毁-->
    <session-timeout>10</session-timeout>
</session-config>
//手动注销
HttpSession session = req.getSession();
session.invalidate();//销毁session

使用session

@WebServlet("/session")
public class SessionServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html");
        resp.setCharacterEncoding("UTF-8");

        HttpSession session = req.getSession();//获取session
        session.setAttribute("person", new Person("www", 10, "fruit"));//在session中放置属性
        session.setAttribute("name", "www");

        String id = session.getId();//获取session的id
        if (session.isNew()){//判断session是否创建
            resp.getWriter().write("首次创建session,id:" + id);
        }else {
            resp.getWriter().write("获得session,id:" + id);
        }
    }
}


HttpSession session = req.getSession();
Person person = (Person) session.getAttribute("person");//获取session的属性
String name = (String) session.getAttribute("name");
resp.getWriter().println(person);
resp.getWriter().println(name);


HttpSession session = req.getSession();
 session.invalidate();//销毁session

如有不对的地方欢迎指出,大家共同进步!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值