cookie&session

会话的概念

用户打开浏览器,浏览不同的网页(资源),发出多个请求,直到关闭浏览器的过程,称为一次会话(多次请求). 如同打电话.

我们在会话的过程(多次请求)之中,用户可能会产生一些数据,这些数据话有的需要保存起来的,我们就可以通过会话技术保存用户各自的数据

为什么要使用会话技术

保存一次通话过程中的数据!

会话技术中数据的保存方式:

浏览器存储会话数据:cookie

服务器存储会话数据:session

cookie(记住用户名密码)

==cookie是客户端(浏览器)的技术==,用户浏览的信息以键值对(key=value)的形式保存在浏览器上。如果没有关闭浏览器,再次访问服务器,会把cookie带到服务端,服务端就可以做响应的处理。

3.3.2session(记住登录用户名 购物车)

==session是服务器端的技术。==服务器为每一个浏览器开辟一块内存空间,即session。由于内存空间是每一个浏览器独享的,所有用户在访问的时候,可以把信息保存在session对象中。同时,每一个session对象都对应一个sessionId,服务器把sessionId写到cookie中,再次访问的时候,浏览器会把cookie(sessionId)带过来,找到对应的session对象。

  1. 会话概念

    1. 会话就相当于一次通话,表示从浏览器和服务器的一次通话过程【多次请求和响应】

    2. 会话建立:打开浏览器第一次请求服务器

    3. 会话结束:直到浏览器和服务器有一方关闭

  2. 为什么要使用会话技术?

    1. 要保持一次会话中的重要数据

    2. 客户端会话技术:cookie 表示将数据保存在浏览器

    3. 服务端会话技术:session 表示将数据保存在服务器

cookie:客户端的会话技术,保存数据在浏览器!

cookie:一个名称和一个值 一些可选属性 cookie存储的数据大小和个数都有限

cookie写入:response.addCookie() 将cookie从服务器 写入到浏览器

cookie获取:request.getCookies()

相关的API

  • 创建一个Cookie对象(cookie只能保存字符串数据。可以保存中文 但是要求tomcat版本8.5+)

new Cookie(String name,String value);

  • 把cookie写入浏览器

  • response.addCookie(cookie); 

  • 获得浏览器带过来的所有Cookie:

  • request.getCookies() ; //得到所有的cookie对象。是一个数组,开发中根据key得到目标cookie

  • cookie的 API

  • cookie.getName() ; //返回cookie中设置的name
    cookie.getValue(); //返回cookie中设置的value

  • @WebServlet("/cookie02")
    public class CookieServlet02 extends HttpServlet {
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("CookieServlet02...");

            //3.获取客户端请求携带的cookie数据
            Cookie[] cookies = request.getCookies();
            for (Cookie cookie : cookies) {
                System.out.println(cookie.getName()+" "+cookie.getValue());
            }
        }

        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doPost(request, response);
        }
    }

  1. cookie的特点

    1. cookie是一门客户端会话技术,保存数据在客户端浏览器

    2. cookie在第一次请求时没有,通过服务器以响应头的方式写给浏览器,在浏览器第二次发送 请求时,就会携带cookie到服务器

    3. cookie存储的字符串数据

    4. cookie存储的大小以及个数有限

    5. cookie存储数据不安全 因此cookie会存储一些私人数据或不重要的数据

  2. cookie使用的API

    1. 创建Cookie对象:Cookie cookie = new Cookie(String name,String value);

    2. cookie写入:response.addCookie(cookie);

    3. cookie获取:Cookie[] cookies = request.getCookies();

    4. 获取cookie名称:cookie.getName();

    5. 获取cookie值:cookie.getValue();

  1. Cookie的有效时长:cookie.setMaxAge(int seconds)

    1. -1:默认值,表示会话级别 浏览器一关闭则cookie删除

    2. 0:删除cookie

    3. 正整数:表示cookie的有效时间 单位是秒

  2. cookie的有效路径:cookie.setPath(String path);

    1. 不同路径下的cookie名称可以一样

    2. cookie默认路径是当前Servlet所在资源路径

    3. cookie有效路径一般设置为当前项目的虚拟路径:setPath(request.getContextPath());

    4. cookie存储设置路径,在其路径同级目录和子目录下都可以访问到该cookie

  3. cookie存储中文及特殊字符

    1. tomcat已经解决了cookie中文存储,但是仍然不能存储特殊字符,比如空格...

    2. 存储时编码:URLEncoder.encode(value,"UTF-8");

    3. 获取时解码:URLDecoder.decode(value,"UTF-8");

  4. cookie可以一次存储多个

Session

session是服务器端的会话技术,用于保存数据在请求间实现数据共享。

session是服务器端的会话技术。服务器为每一个浏览器开辟一块内存空间,即session对象。由于session对象是每一个浏览器特有的,所以用户的记录可以存放在session对象中。同时,每一个session对象都对应一个sessionId,服务器把sessionId写到cookie中,再次访问的时候,浏览器把sessionId带过来,找到对应的session对象

3.2cookie和Session的不同

  • Session将数据保存在服务器端,cookie将数据保存在客户端浏览器

  • session一般保存比较重要的数据,cookie保存的相对不重要比较私人的数据

  • session存储的是对象Object,cookie存储的是字符串数据

  • session在数据的存储上没有限制,cookie存储数据量大小以及个数都有限制

  • session是基于cookie实现的

3.3Session的执行原理

1、获得cookie中传递过来的SessionId(cookie)(浏览器请求服务器会将该项目路径下的cookie带过去)

2、如果Cookie中没有sessionid,则创建session对象(第一次调用request.getSession()创建Session对象

3、如果Cookie中有sessionid,找指定的session对象

如果有sessionid并且session对象存在,则直接使用

如果有sessionid,但session对象销毁了,则执行第二步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值