经过了两个阶段JAVA课程的学习,收获很多大学课堂没有涉及到的实战性知识,其中包括面试时常见的一些问题,下面我就cookie和session部分的常见面试题,做了如下整理:
1、cookie和session的原理及区别?
cookie采用的是客户端保持会话状态的储存机制,它是服务器在本地机器上存储的小段文本或者是内存中的一段数据,并随每一个请求发送至同一个服务器。
session采用的是服务器端保持状态的管理机制,它把这些文件信息以文件形式存放在服务器的硬盘空间上(这是默认情况,可以用MemCache把这种数据放到内存里面),当客户端向服务器发出请求时,要求服务器端产生一个session时,就先检查一下客户端的cookie里面有没有session_id,是否过期?如果有这样的session_id,服务器端会根据cookie里的session_id把服务器的session检索出来;如果没有这样的session_id,服务器端会重新建立一个。PHPSESSID是一串加了密的字符串,它的生成按照一定的规则来执行,同一客户端启动两次session_start的话,session_id是不一样的。
综上可以看到,cookie保存在客户端浏览器中,而Session则保存在服务器上。如果说cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访时只需要查询客户档案表就可以了。
2、session产生的session_id放在cookie里面,如果用户把cookie禁止掉,是不是session也不能用了呢?
禁止掉cookie后,session当然可以用,不过要通过其他的方式来获得这个session_id,比如可以跟在url的后面,或者以表单的形式提交到服务器端,从而使服务器端了解客户端的状态。
3、为什么说session 比cookie更安全?
真正的cookie存在于客户端硬盘上的一个文本文件,如果两者一样的话,只要cookie就好了,让客户端来分提服务器的负担,并且对于用户来说又是透明的。但是cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,而session的安全性相对要高一些。
session的session_id是放在cookie里,要想功破session的话,得分两步:首先要得到session_id,攻破cookie后,你要得到session_id,session_id是在有人登录,或者启动session_start时才会有,但是你并不知道什么时候会有人登录;接着要获取有效session_id,session_id是加密的,第二次session_start的时候,前一次的session_id就没有用了,session过期时session_id也会
失效,想在短时间内功破加了密的session_id很难,session是针对某一次通信而言,会话结束session也就随着消失了。
4、cookie和session的生命周期(以20分钟为例)?
cookie的生命周期是累计的,从创建时开始计时,20分钟cookie生命周期结束;session的生命周期是间隔的,从创建时开始计时,如在20分钟,没人访问session,那么session生命周期被销毁,但是,如果在20分钟内有人访问过session,那么session的生命周期将被重新计算。另外,关机会造成session生命周期的结束,但是对cookie没有影响。
其实,关于cookie和session还有许多细节的问题,千锋Java课程老师都一一做了讲解,非常感谢千锋老师的耐心与细心,希望在毕业后能够顺利拿到心仪的offer!
相关文章
了解千锋动态
关注千锋教育服务号
扫一扫快速进入
千锋移动端页面
扫码匿名提建议
直达CEO信箱