javaWeb(八)Session Cookie

是什么:
Cookie: 是浏览器端的客户数据容器。
Session:是服务器端的客户数据容器。

演示怎么用和原理:( Spring boot 框架的基础上演示)

@RestController
@RequestMapping("hello")
public class helloCookie  {
        @RequestMapping("getData")
        public String getData(HttpServletResponse response, HttpServletRequest request) throws IOException {
            //客户端浏览器会根据服务器地址(例如:www.baidu.com),来查询本地保存的cookie 并发送给服务器端(例如:百度服务器),服务器会封装到request 中,然后通过request.getCookies()就可以获取到 cookie数据 。
            Cookie[] cookies = request.getCookies();
            for(Cookie c : cookies){
                if(c.getName().equals("lastTime")){
                    return "you last Time:"+c.getValue();
                }
            }

            //自己创建一个cookie.c
//            Cookie c= new Cookie("lastTime",System.currentTimeMillis()+"");
            Cookie c = new Cookie("lastTime","hello");
            c.setMaxAge(10);//设置10秒失效, 设置为0 就会立即失效,如果不设置,cookie会生存到本次浏览器关闭(注意是浏览器关闭,不是关闭这个网站的标签)
            //设置浏览器在访问hello项目时,发送该cookie,否则访问 服务器时,都会带上这个cookie.
            c.setPath("/hello");
            response.addCookie(c);
            return "It's you first time to be here.";
        }
}

PS: 注意不同的浏览器(IE,chrome,firefox… 的cookie不共享),有自己储存cookie的地方。所以不同的浏览器,有自己各自的cookie.

Session Demo

/**
 * session是服务器端,为每个客户端创建的独立的数据容器。
 * 通过 request.getSession()获取 session.
 * getSession()方法内部会去 request 请求里的cookie 和 url 中查找 jsessionid.
 * 如果找到就去内存中查找对于的客户端session容器,如果没有,为当前客户端,创建一个session.
 * 如果cookie 被禁用,那么可以通过url 来传递,但是局限很大,具体看下面代码。
 *
 * session 默认有效时长是 30分钟,如果30分钟内内操作,服务器端会默认销毁掉
 */
@RestController
@RequestMapping("session")
public class helloSession {

    @RequestMapping("buy")
    public String buy(HttpServletResponse response, HttpServletRequest request){
        //服务器通过客户端回传的 jsessionid 获取,对应客户端的session.

        //如果当期没获取到jsessionid就会自己创建一个。
        HttpSession session = request.getSession();
        session.setMaxInactiveInterval(30*60);// 是当前session的失效时间,单位秒。如果设置的值为零或负数,则表示会话将永远不会超时。
        return "你买了一台"+session.getAttribute("shop");
    }

    @RequestMapping("add")
    public String add(HttpServletResponse response, HttpServletRequest request){
        //如果当期没获取到jsessionid就会自己创建一个。

        HttpSession session = request.getSession();
        session.setAttribute("shop","电脑");
        return "购买成功";
    }


    @RequestMapping("home")
    public String home(HttpServletResponse response, HttpServletRequest request){
        StringBuilder sb = new StringBuilder();
        //cookie 被禁用后自己通过url 传递 sessionid,
        //局限问题:同一个用户,自己打开多个浏览器中传递sessionid,除非自己手动copy URL.
        //不同于Cookie ,cookie是保存在本地的,多个窗口访问同一个 地址(www.baidu.com),回去本地去读,cookie值,cookie 保存了jsessionid
        //同样也要注意,每个浏览器厂商保存cookie的位置和方式不同,不容浏览器也不能通过cookie 获取 sessionid.
        String jsessionid = request.getSession().getId();
        //注意连接后面试';'不是问号。
        sb.append("<a href='/session/add;jsessionid="+jsessionid+"'>购买</a><br>");
        sb.append("<a href='/session/buy;jsessionid="+jsessionid+"'>结账</a>");
        return sb.toString();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值