程序员面试宝典--session和cookie

首先给大家推荐一个博客:

http://justsee.iteye.com/blog/1570652

总结一下巨人的总结:

http是无状态的传输协议,无状态 不是omg的中单无状态,而是说我们发送的每次http请求都是无状态的,这次发送的请求不会影响下一次发送的请求。比如说我想发送一条请求说我想知道我这是这个发送的第几次请求了。你想要通过请求本身记住状态这次请求是第一次请求,下一次是这次请求的加一次请求,每次请求都是上一次的加一。这样来实现,http是实现不了的。因为他不知道你上一次请求的状态,不知道上一次请求的信息。这就是http的无状态性。(这个问题具体也是可以实现的,可以考虑在项目上加个过滤器来实现)http的每次请求都是相互独立的,这也是他无状态的体现。

http是无状态的,我们又想获得之前请求的状态,或者想要保存一些状态给下一次请求怎么办。显然通过传输请求本身是不能实现的。我们引入了两个概念,session和cookie

面试的时候很多人会问,session和cookie的区别是什么?

我们都会回答,session是服务器端的;cookie是客户端的。

如果面试官再往下问session和cookie是怎么样在。

首先要确定session是什么时候生成的,并不是打开浏览器时或者发送请求的时候,而是执行到  request.getSession()时才会生成session。session的销毁也不是常说的关闭浏览器,当服务器设置的session时常到了,就是规定一段时间到了客户端没有再一次向服务器发出请求,session超时服务器会自动销毁session。手动输入代码HttpSession.invalidate();session会销毁。服务器关闭session会销毁。(这里说的都是保存在内存中的session,后面说的cookie也都是回话cookie。)


session工作:当一个新的请求发送到服务器执行到 request.getSession()时,生成一个session,服务器会通过一定的算法生成一个sessionId,当服务器向客户端发送信息的时候会把这个sessionId一起发给客户端,客户端收到消息后,会把这个sessionId存在cookie中,客户端再向服务器发送请求时服务器会在内存中查找这个SessionId,找到这个Id就不会再生成一个Session,没找到这个Id,服务器会再生成一个session为这个请求服务。当客户端关掉浏览器浏览器会自动删除回话cookie中的SessionId,在发送请求是就不会再携带这个SessionId,服务器也不会查找到这个Id,等Session超时就会删除这个session。这也是为什么说关闭浏览器session就被杀掉了。其实没有,只是不会在调到了。我们可以将浏览器会话cookie中的sessionId存到硬盘上,每次发请求时取得硬盘上的sessionId就可以证明之上所述。当然session作为容器我们大可向里面存放键值对。

session还有好多东西需要学习,没有说到的重点或者说错的地方,希望大家不吝啬的指点一二,共同学习。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值