10月19日学习笔记

一.HttpSession session

       数据保存在服务器内存中,保存时间只有半小时左右

应用场景:登录与退出登录,浏览量与点赞量统计(一个用户只允许操作一次)

在web开发的时候,使用的都是B/S架构,浏览器与服务器直接连接,在服务端就会自动创建一个session对象.。

session.setAttribute(“username”,username); 》》是将username保存在session中!
session 的key值为“username”,value 值就是username真实的值,或者引用值。
 

Session表示会话,不止是在javaweb中存在,只要是web开发,都有会话这种机制。
*         在java中会话对应的类型是:javax.servlet.http.HttpSession,简称session/会话
*         在java web中session是一个存储在WEB服务器端的java对象,该对象代表用户和WEB服务器的一次会话。
*   工作原理:
*  1.打开浏览器,在浏览器上发送首次请求
*  2. 服务器会创建一个HttpSession对象,该对象代表一次会话
*  3. 同时生成HttpSession对象对应的Cookie对象,并且Cookie对象的name是jsessionid,Cookie的value是32位长度的字符串(jsessionid=xxxx)
*  4. 服务器将Cookie的value和HttpSession对象绑定到session列表中
*  5. 服务器将Cookie完整发送给浏览器客户端
*  6. 浏览器客户端将Cookie保存到缓存中
*  7. 只要浏览器不关闭,Cookie就不会消失
*  8. 当再次发送请求的时候,会自动提交缓存中当的Cookie
*  9. 服务器接收到Cookie,验证该Cookie的name是否是jsessionid,然后获取该Cookie的value
*  10. 通过Cookie的value去session列表中检索对应的HttpSession对象

应用场景:登录与退出登录

举例:
当用户已登录系统后,session就会存储一个用户信息对象,此后你可以随时从session中将这个对象取出来进行一些操作,比如进行身份验证,拿到用户的账户信息啊。。。。。。

  1.在方法中接收HttpSession session对象.在登录成功时,使用 session.setAttribute("user",u)方法把UserVO对象往Session对象中保存

 @RequestMapping("/login")//在参数中接收HttpSession session对象
    public int login(@RequestBody  UserLoginDTO user , HttpSession session){
        System.out.println("user = " + user);
        UserVO u=mapper.selectByUsername(user.getUsername());
        if(u!=null){
            if(user.getPassword().equals(u.getPassword())){
                //往Session对象中保存
                session.setAttribute("user",u);
                return 1;
            }
            return 3;
        }
        return 2;
    }

2.在需要验证用户信息时,用UserVO user=(UserVO)session.getAttribute("user")方法

从Session中获取之前保存的对象,然后再判断

session.getAttribute()方法返回的对象是object类型,需要强制转换为接受对象的数据类型

@RequestMapping("/weibo/insert")
    public int insert(@RequestBody WeiboDTO weibo, HttpSession session){
        UserVO user=(UserVO)session.getAttribute("user");
        if(user==null){
            return 2;
        }
        System.out.println("weibo = " + weibo);

        /*创建微博实体类,并把DTO里面的数据装进实体类*/
        Weibo w=new Weibo();
        BeanUtils.copyProperties(weibo, w);
        System.out.println(w);
        /*设置当前时间*/
        w.setCreated(new Date());
        /*设置当前登录用户的id*/
        w.setUserId(user.getId());
        mapper.insert(w);
        return 1;
    }

3退出登录:调用session.removeAttribute("user");方法清除Session里保存的对象.

 /*session存在于服务器内存中的*/
    @RequestMapping("/logout")
    public void logout(HttpSession session) {
        session.removeAttribute("user");
    }

应用场景2:浏览量与点赞量统计(一个用户只允许操作一次)

1)从会话对象中获取和当前页面商品id相关的信息,第一次是获取不到的

2)如果获取的info值为null说明是第一次浏览,调用mapper.updateViewCount(id)方法,让浏览量加1.

3)把当前商品id相关信息保存到Session中,  之后再次查询此商品后,此条件不会再满足,因为值不为null

 @RequestMapping("/selectById/detail")
    public ProductDetailVO selectDetail(int id, HttpSession session){
        /*从会话对象中获取和当前页面商品id相关的信息,第一次是获取不到的*/
        String info=(String)session.getAttribute("view"+id);
        System.out.println("info"+info);
        /*如果info值为null说明是第一次浏览*/
        if(info==null){
            //让浏览量加1
            mapper.updateViewCount(id);
            /*把当前商品id相关信息保存到Session中,
            * 只后再次查询此商品后,此条件不会再满足,因为值不为null*/
            session.setAttribute("view"+id,"isVisibled");
        }
        System.out.println(mapper.selectDetailById(id));
        return mapper.selectDetailById(id);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值