会话,session,cookie

 

Cookie/session的产生原因

一次会话:客户端打开浏览器访问web程序,此时会话接通;不管发送多少次请求均视为一次会话;浏览器关闭,本次会话结束。

如奶茶店进行买五赠一的活动,此时给客户一个卡片(Cookie)。如果每次购买后在卡片记录当前的购买次数,则是cookie的数据存储方式,但数据容易被客户修改。如果在奶茶店记录每个客户的购买次数的方式,则是session的实现方式,此时奶茶店需知道每个客户编号,即通过cookie来记录对应的sessionid方式。

HTTP请求时一种无状态的请求,即两次不同的请求是相互独立的,可以保证其请求速度快。但是如login.jsp完成了登录,但是需要在index.jsp中获取其登录状态获取其登录名等信息。此时不可能让这两个页面都实现登录或者查库等,于是引入了cookie。

Cookie用于在客户端浏览器存储小量的数据,解决了index.jsp获取获取登录状态的需求。但是cookie是存储在客户端浏览器的,客户端可随意的修改,造成了数据不安全,于是有了session。

Session用于在服务器端存储客户的数据。在使用时,通过cookie中存储当前sessionid的方式,来实现多个会话之间的session的区分。

Cookie

工作流程以及特点

客户端发出http请求到服务器,服务器创建Cookie cookie = new Cookie(name,value),并通过HttpServletResponse.addCookie(cookie)方式发送到客户端并写入浏览器。下次发送http请求时,浏览器将自动携带cookie数据发送给服务器。服务器可通过HttpServletRequest.getCookies() 方式获取客户端的cookie信息。

默认情况下,其生命周期和浏览器会话一致,且是不安全的,可以被客户端修改。

一个cookie文件最大为4kb,一个web站点发送cookie不超过40个,一个浏览器最多保存300个cookie。

使用场景

cookie保存用户名

cookie保存历史浏览记录商品的id

中文参数乱码处理以及常用API

对于中文参数的传递,JDK提供 URLEncoder:编码RLDecoder:解码 进行处理。

session

工作流程

客户端发出http请求到服务器;当服务器需要为客户端创建一个session时,如果该请求中包含了一个sessionid的标识,则服务器通过sessionid检索出对应的session,进行调用;如果对应的请求中没有sessionid,服务器则为客户端建立对应的session并产生与之匹配的sessionid (不会重复难以被仿造),在本次响应时将sessionid返回到客户端(一般保存在cookie中)。

常用api以及生命周期

获取:request.getSession()//没有则创建,sessionid是从客户端请求中获取的。

 session.setAttrubute(key,value)    session.getAttribute(key)

Session的生命周期:创建于第一次调用getSession()时;

销毁于:session.invalidate()被销毁,session超时自动关闭,服务器非正常关闭.

在ssm架构中,可直接使用HttpSession完成session的创建,其实质是request.getSession()的调用完成的。

错误观点:只要关闭浏览器,session就消失了

由于客户端大都使用了cookie存储了sessionid;在关闭浏览器时部分cookie被清除,造成下次访问时sessionid被消失,服务器查找不到对应的session则新建session。但是对于原有的session,由于创建时大都设置了失效时间(30分钟),当服务器端发现某一个session据上次客户端调用超过了失效时间,服务器会把对应的session删除以节约资源。

故存在重启浏览器后session仍生效,但是清除缓存后失效的情况。

使用场景

图形验证码的保存获取:HttpSession session ;httpSession.setAttribute ("random", sRand);

存储登录用户的信息:如Users u = (Users)session.getAttribute("customer");

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值