1、首先,Cookie与Session存在的目的是什么?

答:二者都是为了保持客户端访问用户与后台服务器的交互状态,之所以为了保持这种状态,一是为了方便一些业务的实现,另一方面就是为了简化后台服务端的程序设计,提高性能。

2、如何理解Cookie?

答:我理解的Cookie,就是服务器端用来区分访问用户的,一个用户发出HTTP请求,服务端判断这个用户是不是第一次访问,如果是新用户,那么就得先登记,然后把这个用户的一些信息用Key-Value键值对的形式保存起来,通过HTTP响应让用户带回客户端,让用户保存着,下次访问时,捎带着把信息也带过来,一看是老熟人,后台就不用登记直接处理业务了,方便而有效率。

3、如何理解Session?

答:Cookie是保存在客户端的,而客户端保存Cookie是有数量和大小限制的,那我们就想,服务器端信息是可以保存很多很多的,这就有了Session。

我们在新客户访问时,就可以把信息登记然后保存在服务器,给用户一个唯一的信息标识就好了(一般是一个NAME为JSESSIONID的Cookie),下次用户访问的时候,只需要出示信息标识,后台就可以把他其他信息全部取出来(也就是把Session取出来),然后进行业务就好,防止了信息的篡改丢失等问题,而且没有容量限制。

4、Session如何基于Cookie工作?

答:刚刚说道对Session的理解时,提到一个Session的标识(一般是一个NAME为JSESSIONID的Cookie),这个标识一般是用Cookie保存在客户端用来维持Session的,但这是Cookie允许被使用的情况,如果Cookie被禁用,将会默认使用URL Parameter实现。

具体实现流程:
a、客户端第一次发出请求,因为服务端并不知道Cookie是否可用,所以服务端准备一个测试用的NAME为JSESSIONID的Cookie作为客户Session的标识,并将HTTP响应中的URL参数改写,在尾部加上JSESSIONID,返回响应。
b、客户端再次发出请求时,就会包含Cookie是否可用的信息,如果可用,则优先使用Cookie保存JSESSIONID,并会覆盖URL中的ID,如不可用,就用URL Parameter改写的方式实现JSESSIONID的传递,以维持Session。
c、当浏览器关闭或Session过期后,Cookie也就失效了。

5、如何配置SessionCookieName?
答:默认的SessionCookieName就是JSESSIONID,我们可以在web.xml中配置session-config项,其中cookie-config下的name属性就是这个SessionCookieName,可以由用户自己定义。

6、Session如何工作?

答:在通过问题4中的方法获得Session标识后,就可以通过request.getSession()获得HttpSession对象了,如果这个Session标识没有对应HttpSession时,那么就创建一个新的。

那么由谁管理HttpSession对象?

表面上,所有的HttpSession就会被加入到org.apache.catalina.Manager的sessions容器中保存,这个Manager类会管理所有Session的生命周期。Session过期了会被回收。

更具体的是,StandardManager是Manager的实现类,对应的,StandardSession是HttpSession的实现类;StandardManager类负责Servlet容器中所有StandardSession对象的生命周期的管理。

如果Session没有过期,而服务器关闭了,Session还会存在吗?

只要是正常关闭服务器,在关闭之前,StandardManager会把所有没有过期的StandardSession持久化到一个名为“SESSION.ser”的文件中,当Servlet重启时,StandardManager初始化,会重新读取这个文件解析出所有Session对象,重新保存在StandardManager中的sessions集合中,session恢复。

但是,当非正常关闭服务器时,是没有时间持久化Session的,就会导致Session丢失。

7、Cookie与Session有何缺陷?

任何事情都有两面性,他们的存在也带来了一些挑战,如Cookie的容量问题(大小、数量限制)、安全问题(易被篡改)、Session的服务器共享问题。

面试题:cook和session的更多相关文章

  1. 【面试题】了解session和cookie吗?

    问题:SESSION与COOKIE的区别? 1.cookie数据存放在客户的浏览器上,session数据放在服务器上. 2.cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKI ...

  2. .NET面试题(三)

    第1讲:面试前期准备 1.了解相关技术职务需要的技术人才                              2.准备一份出色的个人简历 第2讲:面试前期准备                   ...

  3. smarty练习:考试系统

    考试系统 (0607) 做一个类似于驾校考试的系统,可以选择要考试试题类型,选好后进入考试页面 使用的数据库表格:timu(题目)表,xuanxiang(选项)表,shiti(试题)表,shititi ...

  4. Requests模块 HTTP for Humans

    安装方式 $ pip install requests 基本GET请求(headers参数 和 parmas参数) 1.最基本的GET请求可以直接用get方法 response = requests. ...

  5. Python爬虫十六式 - 第三式:Requests的用法

    Requests: 让 HTTP 服务人类 学习一时爽,一直学习一直爽   Hello,大家好,我是Connor,一个从无到有的技术小白.今天我们继续来说我们的 Python 爬虫,上一次我们说到了 ...

  6. 面试题:servlet jsp cook session 背1

    一.Servlet是什么?JSP是什么?它们的联系与区别是什么? Servlet是Java编写的运行在Servlet容器的服务端程序,狭义的Servlet是指Servlet接口,广义的Servlet是 ...

  7. php面试题12(多态web服务器共享session的方法:将session存到数据库)($val=&$data[$key];)

    php面试题12(多态web服务器共享session的方法:将session存到数据库)($val=&$data[$key];) 一.总结 1.多态web服务器共享session的方法: ...

  8. Session对象的生命周期(面试题/笔试题)

    创建:第一次执行request.getSession()时创建 销毁: 1)服务器(非正常)关闭时 2)session过期/失效(默认30分钟) 问题:时间的起算点 从何时开始计算30分钟? 从不操作 ...

  9. php开发面试题---禁用cookie之后,如何使用session

    php开发面试题---禁用cookie之后,如何使用session 一.总结 一句话总结: 在每个url后面自动加上PHPSESSID的值即可,用户禁止cookie后,服务器仍会将sessionId以 ...

随机推荐

  1. 浅析Python中bytes和str区别

    本博转载自:Chown-Jane-Y的浅析Python3中的bytes和str类型 Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示, ...

  2. [转]linux下查看进程内存使用情况

    动态查看一个进程的内存使用 1.top命令 top -d 1 -p pid [,pid ...] //设置为delay 1s,默认是delay 3s 如果想根据内存使用量进行排序,可以shift + ...

  3. hadoop复合键排序使用方法

    在hadoop中处理复杂业务时,需要用到复合键,复合不同于单纯的继承Writable接口,而是继承了 WritableComparable<T>接口,而实际上,WritableCompar ...

  4. oracle11g,安装失败,提示找不到文件,win7 64位下报错

    提示: 未找到文件 E:\app\Administrator\product\11.2.0\dbhome_5\owb\external\oc4j_applications\applications\W ...

  5. awk常见基本使用

    -F 指定分割符号 print 外层的引号必须是单引号 $n不能被解析 [root@bogon ~]# .txt a:b:c:d a1:b1:c1:d1 a2:b2:c2:d2 a_: :c:dddd ...

  6. android httpclient 设置超时

    3.X是这样的 HttpClient httpClient=new DefaultHttpClient();4.3是这样的CloseableHttpClient httpClient = HttpCl ...

  7. mysql索引之八:myisam压缩(前缀压缩)索引

    myisam使用前缀压缩来减少索引的大小,从而让更多的索引可以放入内存中,默认只压缩字符串,但通过参数配置也可以对整数做压缩,myisam压缩每个索引块的方法是,先完全保存索引块中的第一个值,然后将其 ...

  8. mybatis-spring升级导致的异常

    先记录一下,已被后面排查问题 升级前pom.xml依赖信息: <dependency> <groupId>org.mybatis</groupId> <art ...

  9. oracle 12c使用问题总结

    1.无法登录 安装完毕只能使用system和sys用户,用安装时配置的密码登录:不能使用默认密码 2.远程无法访问 1)检测服务器配置 lsnrctl status 看到(DESCRIPTION=(A ...

  10. java事件监听机制2

    今天早上的两点收获: 1.addActionListener(其中的setActionCommand函数就是要对对象进行唯一性的标记,便于消息传来后进行处理.理论上actionlistener可以全部 ...