jsp-servlet面试题
一、session和cookie的区别
1:cookie数据存放在客户的浏览器上(客户端),session数据放
@1:cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie 欺骗,如果主要考虑到安全应当使用session
@2:session会在一定时间内保存在服务器上.当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用cookie
2:单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的cookie不能3K
@3:将登陆信息等重要信息存放为session;其他信息如果需要保留,可以放在 cookie 中
3:session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到.而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的.cookie只能是子路径访问父路径设置的cookie
4.分析:
http是无状态的协议,客户每次读取web页面时,服务器都打开新的会话,而且服务器也不会自动维护客户的上下文信息,那么要怎么才能实现网上商店中的购物车呢:
session就是一种保存上下文信息的机制,它是针对每一个用户的,变量的值保存在服务器端,通过SessionID来区分不同的客 户,session是以cookie或URL重写 为基础的。
默认使用cookie来实现,系统会创造一个名为JSESSIONID的输出cookie,我 们叫做session cookie,以区分persistent cookie(我们通常所说的cookie)
注意session cookie是存储于浏览器内存中的,并不是写到硬盘上的,这也就是我们刚才看到的JSESSIONID,我们通常情是看不到JSESSIONID的,但 是当我们把浏览器的cookie禁止后,web服务器会采用URL重写的方式传递Sessionid,我们就可以在地址栏看到 sessionid=KWJHUG6JJM65HS2K6之类的字符串。
明白了原理,我们就可以很容易的分辨出persistent
cookie和session cookie的区别了,网上那些关于两者安全性的讨论也就一目了然了,session
cookie针对某一次会话而言,会话结束session cookie也就随着消失了,而persistent
cookie只是存在于客户端硬盘上的一段文本(通常是加密的),而且可能会遭到cookie欺骗以及针对cookie的跨站脚本攻击,自然不如
session cookie安全了。
5:通常session cookie是不能跨窗口使用的,当你新开了一个浏览器窗口进入相同页面时,系统会赋予你一个新的sessionid,这样我们信息共享的目的就达不到了,此时我们可以先把sessionid保存在persistent cookie中,然后在新窗口中读出来,就可以得到上一个窗口SessionID了,这样通过session cookie和persistent cookie的结合我们就实现了跨窗口的session tracking()会话跟踪)
6:简介:
Request、Session、Application三者的对比
一、生成方式
1.Request,浏览器发送一次请求之后,服务器端生成一个包含请求参数的Request对象。
2.Session,浏览器第一次访问服务器时,创建在服务器端。
3.Application,在服务器启动时就生成。
二、生存周期
1.Request,仅仅在一个用户的一次请求中才有作用。
2.Session,在第一次创建到设定的Session生存周期内有效一般为30分钟(也可自己设定)。
3.Application,从服务器开启到服务器关闭。
三、使用范围
1.Request,仅对一个用户的一次请求(forword/include后仍然是同一个请求)有效,
2.Session,一个Session对应一个用户,在Session生存周期内有效。但关闭浏览器后,由于Session是在服务器端生成
的,所以服务器端的Session不会马上销毁。只有当Session Timeout或调用invalidate()时服务器端的
Session才被销毁。关闭浏览器后,将不能向服务器端发送请求,且服务器的Sesssion只有等待Timeout才能
销毁。
3.Application, 网站的全局变量,所有用户都能用。
四、实际应用
1.Request,用于向服务器发送一次请求的数据。
2.Session,用于保存用户的信息,或是常用到的信息。
3.Application,用于存储网站的全局变量如,访问量,当日访问量
Servlet_生命周期
Servlet_生命周期:首先加载servlet的class,实例化servlet,然后初始化servlet调用init()的方法,接着调用服务的service的方法处理doGet和doPost方法,最后是我的还有容器关闭时候调用destroy 销毁方法
1.加载和实例化
2.初始化
3.请求处理
4.服务终止