会话技术理解

1.会话技术
    有哪些会话技术?
        cookie:客户端的会话技术
        session:服务器端的会话技术
        
    什么是会话?
        就是你与我之间的对话
        一次会话,一次对话,在一次对话中,会聊很多句
        在一次会话中,会有多次请求和多次响应
        
        当其中一方断开的时候,会话结束
        
    会话有什么用?
        在多次请求和响应之间可以实现数据的共享
        
2.Cookie
    客户端的会话技术
    
    cookie的入门小案例?
        ServletDemo1:
            //方式一(原始写法):
            response.setHeader("set-cookie", "name=jerry");
            
            //方式二:
            //创建cookie对象
            Cookie cookie = new Cookie("name", "tom");
            
            //添加cookie,设置cookie的响应信息
            response.addCookie(cookie);
        
        ServletDemo2:
            //获取cookie
            Cookie[] cookies = request.getCookies();
            System.out.println(cookies);
            for (Cookie cookie : cookies) {
                String name = cookie.getName();
                String value = cookie.getValue();
                System.out.println(name + "..." + value);
            }
        
    关于cookie的几个小问题?
        1.cookie能不能写多个
            可以携带多个cookie
            
            如果多个cookie的名称相同的话,会怎么样呢?
                会被覆盖
        
        2.cookie的value值可不可以存储中文
            如果使用的是创建Cookie对象的方式,value值为中文是不会出现乱码问题的
            如果使用的是原始方式设置cookie,value值为中文就会出现中文乱码
                如何解决呢?
                                            
                    对中文进行URL编码和URL解码
        
        3.cookie的生命周期
            cookie默认的生命周期:当浏览器关闭,缓存释放,cookie消失
        
            怎么样能够让即使浏览器关了,cookie也不消失呢(延长cookie生命时长)?
                设置cookie对象中的setMaxAge()方法,单位是秒,如果指定了秒值,那cookie就不会存储在浏览器的缓存中,
                                         cookie.setMaxAge(60);
                而是存储到了本地磁盘,但是时间一到,本地磁盘中的数据也会消失。
                
                如果秒值设置为负数,就是cookie的默认生命周期
                如果秒值设置为0,响应回浏览器之后,cookie立即消失
        
        4.cookie的携带范围
            默认情况下,如果我们没有设置cookie的携带范围,那携带范围就是当前的整个项目,访问任何资源都会带有cookie请求头
            
            我们能不能通过自己设置去控制携带范围?
                可以
                设置cookie对象中的setPath()方法
                
                //设置携带范围
                //cookie.setPath("/day59");//默认设置
                //cookie.setPath("/day59/servletDemo9");//访问具体的某一个资源才会携带cookie
                //cookie.setPath("/");//只要是当前服务器所部署的项目,访问里面所有的资源都会携带cookie
                
3.Session
    服务器端的会话技术
    
    session是一个域对象:
        session域对象的范围是一次会话的范围
        
        setAttribute(String key, Object value)
        getAttribute(String key)
        removeAttribute(String key)
        
    session的入门小案例?
        ServletDemo01:
            //获取session对象
            HttpSession session = request.getSession();
            
            //向session域中存储数据
            session.setAttribute("name", "tom");
        
        ServletDemo02:
            //获取session对象
            HttpSession session = request.getSession();
            
            //从session域中获取数据
            Object value = session.getAttribute("name");
            System.out.println(value);
    
    关于session的几个小问题?
        1.如果浏览器关闭,服务器没有关闭,会有什么情况发生呢?
            因为浏览器关闭,缓存消失,缓存中的JSESSIONID=id也就随之消失了,
            当打开浏览器再次访问服务器中的资源的时候,是不会携带cookie的,
            就获取不到session对象,只能重新创建新的session对象,响应的时候会携带set-cookie。
            
            如果希望下次浏览器访问同一个资源,依然会携带cookie:JSESSIONID=ID的话,该怎么办?
                //手动创建cookie,并且将底层自己创建的cookie给覆盖掉
                Cookie cookie = new Cookie("JSESSIONID", session.getId());
                //设置生存时长
                cookie.setMaxAge(60);
                //响应回去
                response.addCookie(cookie);
    
        2.如果服务器关闭,浏览器不关闭,会有什么情况发生呢?
            服务器的非正常关闭:
                session对象就会从内存中消失
                
                再一次开启开启服务器,通过浏览器访问服务器中的资源,虽然会携带cookie的请求头,但是由于服务器
                已经没有了session对象,会重新创建一个新的session对象,然后回设置响应头set-cookie:......
            
            服务器的正常关闭:
                session对象就会从内存中消失
                
                但是在消失之前就会进行钝化(就是将session对象存储到了本地磁盘),
                然后再一次开启服务器,会进行活化(激活,就是将sessio对象从本地磁盘还原到服务器的内存中),
                通过浏览器访问服务器中的资源,会携带cookie的请求头,然后服务器就匹配到了,就能够获取到数据
    
            序列化操作?
                将对象以流的形式存储到本地磁盘
                
            反序列化操作?
                将本地磁盘中的数据还原成内存中的对象
                
        3.session在什么情况下会销毁?
            1.服务器关闭
            2.session自杀
                session.invalidate();
            3.设置session的存活时长
                默认存活时长,30分钟
                <session-config>
                    <session-timeout>30</session-timeout>
                </session-config>    
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值