关于cookie和session

大家web开发时候会经常遇到这两个概念,对于一些初学者可能还分不清这两者之间的关系。

我这里举个例子:

比如有一家理发店,理发店有个前台的柜子。 然后你有理发的VIP卡号。 

对于cookie模式,就是你会员卡放到你自己的身上,你去理发的时候你拿出你卡号,就给你打折,认出了你。

对于session模式,就是你去理发的时候,你的卡号都在理发店柜台那里。 然后柜台就是session,每个session都有一个sessionId,当然也会过期。然后对比看看这个session是不是你的。

关于安全性:

显然,对于cookie来说,安全性是没有那么高的。因为卡容易被客户伪造。同样的,cookie的信息保存在游览器,是不安全的。因为是保存在客户端。而对于session来说,相当于你的会员卡放在理发店前台,理发店有专门的柜子帮你保存,这样东西是不容易丢,保存在服务器的session是安全的。

关于实现原理:

思考一下服务端如何识别特定的客户?这个时候Cookie就登场了。每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端。第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在 Cookie 里面记录一个Session ID,以后每次请求客户端的cookie把这个sessionID发送到服务器,我就知道你是谁了。有人问,如果客户端的浏览器禁用了 Cookie 怎么办?一般这种情况下,会使用一种叫做URL重写的技术来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。

一句话概括:

session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)


最后写一下代码实现:

Cookie:

        Cookie c = new Cookie("user","Tom");
        response.addCookie(c);

Session:

        HttpSession session = request.getSession();

        void session.setAttribute(String name,Object boj);
        //获取绑定对象
        Object session.getAttribute(String name);
        //移除绑定对象

        void session.removeAttribute(String name);


好了,就大致回忆一下,希望对大家有帮助哦

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值