【面试题】Cookie&Session

什么是Cookie

Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户的状态,就使用response向客户端浏览器办法一个cookie。客户端浏览器会把cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器,服务器检查该cookie,以此来辨认用户状态,服务器还可以根据需要修改cookie的内容。
Cookie机制
在程序中,会话跟踪是很重要的事情。理论上,一个用户的所有请求操作都应该属于同一个会话,而另一个用户的所有请求操作则应该属于另一个会话,二者不能混淆。例如,用户A在超市购买的任何商品都应该放在A的购物车内,不论是用户A什么时间购买的,这都是属于同一个会话的,不能放入用户B或用户C的购物车内,这不属于同一个会话。而web应用程序是使用HTTP协议传输数据的,HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接,这就意味着服务器无法从连接上跟踪会话,即用户A购买了一件商品放入购物车内,当再次购买商品时服务器已经无法判断该购买行为是属于用户A的会话还是用户B的会话了,要跟踪该会话,必须引入一种机制,Cookie就是这样的一种机制,它可以弥补HTTP协议无状态的不足,在Session出现之前,基本上所有的网站都采用Cookie来跟踪会话。
什么是Session
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。如果说Cookie机制是通过检查客户身上的通行证来确定客户身份的话,那么Session机制就是通过检查服务器上的客户明细表来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。

Session机制

除了使用Cookie,web应用程序中还经常使用Session来记录客户端状态。Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,相应的也增加了服务器的存储压力。
如何利用Cookie实现自动登录
当用户在某个网站注册后就会收到一个唯一用户ID的Cookie.客户后来重新连接时,这个用户ID会自动返回,服务器对它进行检查,确定它是否为注册用户且选择了自动登录,从而使用户无需给出明确的用户名和密码,就可以访问服务器上的资源。

保存Session id有几种方法

保存session id的方式可以采用cookie,这样在交互过程中浏览器可以自动地按照规则把这个标识发送给服务器。

由于cookie可以被人为禁止,必须有其他的机制以便在cookie被禁止的时候仍然能够把Session id传递会服务器,经常采用的一种技术叫做URL重写,就是把session id附加在URL路径的后面,附加的方式也有两种,一种是作为URL路径的附加信息,另一种是作为查询字符串附加在URL后面。网络在整个交互过程张总始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个session id。

另一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。

session什么时候被创建

一个常见的错误就是以为session在有客户端访问时就被创建,然而事实是直到某server端程序(如servlet)调用HttpServletRequest.getSession(true)这样的语句时才会被创建。

Session什么时候被删除

程序调用HttpSession.invalidate()。

距离上一次收到客户端发送的session id时间间隔超过了session的最大有效时间。

服务器进程被停止。

注意:关闭浏览器只会使存储在客户端浏览器内存中的session cookie失效,不会使服务器端的session对象失效。

cookie机制和session机制的区别

具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,由于在服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上还有其他选择。

【面试题】CookieSession相关推荐

  1. 前端不常见25k+面试题(持续更新)

    这一套面试题可能和网上看到的都不太一样,如果你都能答出来,那你就是25k+的水平了 1.苹果手机字体的锯齿怎么实现平滑 -webkit-font-smoothing: subpixel-antiali ...

  2. mysql关于时间的面试题,mysql时间设置默认值MySQL常见面试题

    1.limit(选出10 到20 条) select * from students order by id limit 9,10; 2.MySQL 会使用索引的操作符号 =,>,=,betwe ...

  3. C++ 笔记(33)— C/C++ 程序员常见面试试题深入剖析

    1. 找错题 试题1: void test1() {char string[10];char* str1 = "0123456789";strcpy(string, str1); ...

  4. 前端面试题笔记 2021.8.26

    2021.8.26学习笔记 如果需要匹配包含文本的元素,用下面哪种方法来实现? A. text() B. contains() C. input() D. attr(name) 正确答案: B tex ...

  5. andorid 启动模式面试题

    现在有四个activity a,b,c,d ,设置a为标准模式,b为singletop模式 c设置singletask模式,d设置SingleInstance 模式 a启动b ,b 启动 c ,c启动 ...

  6. java 关键字(面试题)

    学而时习之,温故而知新. 今天群里有人问java中true ,false 是关键字吗, 这里记录下,不是关键字,我还特意翻看之前的书看看 下面是 Java 语言保留使用的 50 个关键字: 关键字 g ...

  7. Kotlin的几个面试题

    今天去自己心仪的公司去面试,本来信心满满,结果面试下面自己深感能力不足,哎,错失了一次这么好的机会 不过还是感谢能给自己这次面试的机会 1 说一下Kotlin的伴生对象(关键字companion使用要 ...

  8. 浙江大学数学专业考研试题参考解答

    浙江大学2009年数学分析考研试题参考解答 浙江大学2010年数学分析考研试题参考解答 浙江大学2011年数学分析考研试题参考解答 浙江大学2012年数学分析考研试题参考解答 浙江大学2013年数学分 ...

  9. Java程序猿面试题集(181- 199)

    Java面试题集(181-199) 摘要:这部分是包括了Java高级玩法的一些专题,对面试者和新入职的Java程序猿相信都会有帮助的. 181.  182. 183. 184. 185. 186. 1 ...

最新文章

  1. 在RHEL7.8上安装配置tomcat
  2. Java ObjectStreamClass getSerialVersionUID()方法(带示例)
  3. python 多线程读写文件_python多线程写入文件问题
  4. 邮件里直接显示图片_利用邮件合并带图片功能批量制作准考证、工作证、成绩通知单等...
  5. 复读复旦大学计算机考研,2021车辆跨考计算机408,407分上岸复旦计算机,弯路预警!!!...
  6. Microsoft Visio 2003下载地址
  7. [计算机网络]RJ45直通线和交叉线的连接方式和设备类型解析
  8. THINKPHP网站漏洞怎么修复解决
  9. 查看连接到手机热点的树莓派IP地址
  10. 水星路由器DNS服务器未响应,新买的水星(MERCURY)路由器怎么设置?
  11. linux入门详细介绍
  12. (重磅!价值一千元的R代码送给你)芯片探针序列的基因组注释 芯片没有注释信息 从头基因组比对gtf文件开始atcg 只有探针核苷酸序列的首先探针核苷酸序列需要比对到参考基因组然后比对后的文件
  13. 微信小程序 腾讯地图逆地址解析reverseGeocoder之poi_options
  14. 计算机科学与技术1k怎么算,1K等于多少个字节?
  15. Angular UI框架 Ng-alain @delon的脚手架的生成开发模板
  16. mysql中去除富文本字段中的html标签
  17. 简单神经网络训练模型(pima-indians-diabetes)
  18. 分享一下身边朋友自学android开发及找工作的那些事!【不足勿喷】 1
  19. 作为程序员的他,大学四年一直自学,全靠这些实用工具和学习网站
  20. 推荐一个免费的论文查重网站

热门文章

  1. 特征锦囊:怎么批量把特征中的离群点给处理下?
  2. Yoshua Bengio等图神经网络的新基准Benchmarking Graph Neural Networks(代码已开源)
  3. Github标星24.9k!适合初学者的有趣、入门级的开源项目
  4. python进阶之多进程
  5. 国防科大提出基于可变形三维卷积的视频超分辨,代码已开源
  6. zkdoctor安装部署
  7. checkbox反复调用attr('checked', true/false)只有第一次生效
  8. AS3深拷贝数据对象(1)深拷贝基本数据类型
  9. HDU 2899 三分
  10. [原创]关于打开新窗口和关闭老窗口的2个方法!