cookie&session

cookie&session

一、基础知识

1.jsp
    
2.会话技术(了解)
(1)简介:当用户打开浏览器的时候,访问不同的资源,直到用户将浏览器关闭,可以认为这是一次会话.        
(2)作用:(保存用户访问产生的数据)
    因为http协议是一个无状态的协议,它记录不了上次访问的内容.用户在访问过程中难免会产生一些数据,
    通过会话技术就可以将其保存起来.
    例如:用户登录 购物车 访问记录
(3)分类
    cookie :浏览器端会话技术
    session:服务器端会话技术        

    
二、cookie

1.简介
  浏览器端会话技术
  工作原理:由服务器生成,key=value格式,通过响应头(set-cookie)写回浏览器,保存在浏览器端,
  当浏览器下一次访问的时候,根据一定的规则携带不同的cookie,通过请求头(cookie)携带给服务器.

2.常用方法 ★★★
(1)构造
    格式:new Cookie(String key,String value);
    例如:Cookie a = new Cookie("akey","avalue");
(2)写回浏览器:response.addCookie(Cookie c)
(3)获取:Cookie[] request.getCookies();
(4)cookie的api:
    a.getName() :获取cookie的key(名称)
    b.getValue():获取指定cookie的值
    c.setMaxAge(int 秒):设置cookie在浏览器的存活时间(持久化)
        若设置int为0:删除cookie(前提必须路径保持一致)
    d.setPath(String path):设置cookie的路径  /day1101/
        若访问的链接的路径中包含cookie的path,则携带过去
        例如:c.setPath(request.getContextPath()+"/");
(5)注:cookie不能跨浏览器;cookie中不支持中文

3.生活实例(了解)
  类似于面试过程,cookie相当于进入下一轮面试的凭证,考生相当于浏览器,面试官相当于服务器
    

三、session

1.简介
  服务器端会话技术,依赖于cookie
  工作原理:浏览器访问服务器,服务器获取jsessionid
    若获取不到:
        服务器创建一个session,保存用户数据,将当前session的jsessionid通过cookie返回浏览器
    若获取到:
        服务器拿着该jsessionid去session池中查找有无该session
            若查找到:
                直接拿过来使用,将数据保存,将当前session的jsessionid通过cookie返回浏览器
            若查找不到:
                服务器创建一个session,保存用户数据,将当前session的jsessionid通过cookie返回浏览器
    
2.常用方法 ★★★
    获取一个session:
        HttpSession request.getSession():
            
3.域对象:session ★★★
(1)xxxAttribute()
(2)存放的私有的数据
(3)生命周期
    创建:java代码中可以认为 第一次使用request.getSession创建
    销毁:
        服务器非正常关闭
        session超时
            默认时间超时:30分钟  web.xml有配置 
            手动设置超时:setMaxInactiveInterval(int 秒) 了解
        ★手动删除session 
            session.invalidate()
(4)域对象小结
    ServletContext:共享的数据
    HttpServletRequest:一次请求的数据
    HttpSession:私有的数据

4.生活实例(了解)                    
  类似于银行存钱,session相当于银行卡,数据相当于卡里的钱,客户相当于浏览器端,银行相当于服务器端

  
四、常见案例

1.案例一-记录上次访问时间
(1)需求:当用户第一次登录的时候,提示:你是第一次访问,且记录该次访问时间,
          下一次访问的时候,获取上一次访问时间且展示出来
(2)技术分析:会话技术 cookie jsp
(3)步骤分析
    a.创建一个serlvet RemServlet 路径:/rem
    b.在servlet中:
        获取指定名称的cookie 例如:名称为lastTime
            request.getCookies()
        判断cookie是否为空
            若为空:提示信息 第一次访问
            若不为空:
                获取此cookie的value
                展示信息:你上次访问时间是...
        设置访问路径,设置存活时间
        将这次访问时间记录,写回浏览器

2.案例二-浏览记录
(1)需求:记录用户浏览历史
          当用户访问一个商品的时候,需要将该商品保留在浏览记录中
(2)技术分析:cookie jsp
(3)步骤分析
    a.先将product_list.htm转成jsp(将day01 Resource里面的案例中的内容全部复制到day1101 WebContent中)
        (新建一个product_list.jsp,将其第三行之后的内容删除,将product_list.htm中的内容全部复制过来,
        修改index.html中"手机数码"对应的超链接)
    b.点击一个商品,展示该商品的信息,将该商品id记录到cookie中  (GetProductByIdServlet)
        (先修改product_list.jsp中商品的超链接,然后复制product_info.htm,并修改商品名称,价格,图片)
        获取之前的浏览记录(获取指定的cookie) 例如名称:ids
        判断cookie是否为空
            若为空 将当前商品的id起个名称 ids 放入cookie中  ids=1
            若不为空,获取值 例如:ids=2-1  当前访问的id=1  使用"-"分割商品id
                判断之前记录中有无该商品(获取值,转成list集合)
                    若有:
                        将当前的id放入前面  结果 ids=1-2
                    若没有:
                        继续判断长度是否>=3
                            若>=3,移除最后一个,将当前的id放入最前面
                            若<3,直接将当前的id放入最前面.
            例如:
                若 ids=3-2-1 现在访问1 结果 ids=1-3-2
                若 ids=4-3-2 现在访问1 结果 ids=1-4-3
            设置访问路径,设置存活时间,写回浏览器
        跳转到指定的商品页面上    
    c.再次回到product_list.jsp页面,需要将之前访问商品展示在浏览记录中
        获取指定名称的cookie ids  例如:ids=2-3-1
        判断ids是否为空  切割
       (记得最开始要导包)
       
3.案例三-清空浏览记录
(1)需求:删除浏览记录
(2)技术分析:cookie.setMaxAge(0)
(3)步骤分析:
    a.在浏览器记录中添加一个超链接 
        <a href="/day1101/clearHistroy">清空</a>
    b.创建servlet ClearHistroyServlet
        创建一个cookie 
            名称路径保持一致
        设置时间
            setMaxAge(0)
        写回浏览器
        页面跳转
            重定向 product_list.jsp

4.案例四-添加到购物车
(1)需求:在商品详情页面有一个添加到购物车,点击则将该商品添加到购物车,
          点击购物车链接将里面的所有商品展示出来
(2)技术分析:session
(3)步骤分析:
    a.点击添加到购物车的时候,提交到一个servlet(AddToCartServlet)
       (修改product1234.htm中"加入购物车"对应的超链接)
        需要将商品名称携带过去
    b.addToCartServlet中的操作
        获取商品的名称
        将商品添加到购物车 购物车的结构 Map<String 名称,Integer 购买数量>  将购物车放入session中就可以了
            从session中获取购物车
            判断购物车是否为空
                若为空:
                    第一次购物,创建一个购物车
                    将购物车放入session中
                    将当前商品put进去.数量:1
                若不为空:继续判断购物车中是否有该商品
                    若有:
                        取出count 将数量+1 
                        将商品再次放入购物车中
                    若没有:
                        将当前商品put进去 数量:1        
        提示信息:你的xx已添加到购物车中
    c.点击购物车链接的时候 cart.jsp
        从session获取购物车
        判断购物车是否为空
            若为空:提示信息
            若不为空:遍历购物车即可
            
5.案例五-清空购物车(扩展)
(1)需求:清空购物车
(2)技术分析:session
(3)思路:将购物车移除;将session干掉
(4)步骤分析:
    a.在cart.jsp上添加一个超链接 清空购物车
        <a href="/day1101/clearCart">清空购物车</a>
    b.在clearCart中
        调用session.invalidate()
        重定向到购物车页面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值