jsp中cookie与session等自己总结精华
(1) JSP中的九大内置对象 page request session application pagecontext response config out
exception(在编程中,并不是说没有创建对象,而是会帮我们创建)
cookie不是内置对象,需要的时候去创建(作用:可以保存密码,记住你的密码,账户,下次不用输入了)(2) JSP中的四大作用域:
page:当前页面,也就是只要跳到别的页面就失效了
request:一次会话,简单的理解就是一次请求范围内有效。(如果href action 把页面1的有用数据给传到下一
个servlet中,如果servlet使用重定向到其他的页面2,在重定向的过程中,传输的信息会被丢失,那么
上一个请求失效,会发送一个新的请求。(那么有人想了?如果在servlet使用了
req.setAttribute("44", "55");结果就是页面2获取不到这个请求。那在页面2能获取到那些数据呢?
resp.sendRedirect("./jsp/manage/index.jsp? 44=55");out.println(request.getParameter("44"));就
能 获取到。如果使用转发,则上一个请求内的内容还可以使用。如果在本服务器内又想使用重定
向,又想传递数据,那就使用session
session:浏览器进程,只要当前页面没有被关闭(没有被程序强制清除),不管怎么跳转都是有效的。session
作用域比较容易理解,同一浏览器对服务器进行多次访问,在这多次访问之间传递信息,就是session
作用域的体现,
application:服务器,只要服务器没有重启(没有被程序强制清除),数据就有效(计算这个服务器运行
期间总共有多少人访问)
(3)JSP中三大组件: servlet filter listener
(4) 过程1:http协议是无状态的,那么问题来了当一个请求发送到服务器,他能响应并操作。也就是任何
人都能访问到自己写的地址,但是在实际中,有些页面操作是需要登陆才能操作的,这样我们就可以
定义一个对象他是存在我们浏览器访问期间的,当每次访问一个页面时,我们都去判断 对象是否存在,
存在才能访问。同样注销的时候,我们把这个对象销毁。那么jsp内置对象session就满足这个条件。
(每一个页面都写一个判断的话,代码重复,于是可以在用Filter过滤器中设置一次就ok)
(5)cookie失效:如果你使给当前cookie设置了时间,那么它被保存到硬盘上,一直会到你的时间结束。
没有设置时间,则保存在内存上,生理周期在会话期间(浏览器开始访问服务器,到浏览
器关闭)。(在客户端)
(6)session失效:(生命周期):会话期间(浏览器开始访问服务器,到浏览器关闭)。设置的时间,是你
与服务器的链接不刷新时间就过期,你一直刷新,那么一直不会失效。
session销毁场景:1、服务器关闭 2、session过期 3、手动销毁 session.invalidate()HttpSession session = req.getSession();
session.setAttribute("username",name);
session.setMaxInactiveInterval(60*3);这个是如果当前存在session,则获得对象的引用,
不存在,则告诉服务器创建一个(在服务器端)(服务器会在客户端第一次访问jsp,servlet,创建
一个session会话,使用html等静态的页面服务器不会自动创建session。使用谷歌浏览器,会
看见当你访问一个jsp页面,就会在cookie里面找到JSESSIONID)
(7)虽然Session保存在服务器,对客户端是透明的,它的正常运行仍然需要客户端浏览器的支持。这是因为Session需要使用Cookie作为识
别标志。HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONID
的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session依据该Cookie来识别是否为同一用户。
因为Session默认是需要Cookie支持的 但有些客户浏览器是关闭Cookie的 这个时候就需要在URL中指定服务器上的session标识
(8)发送一次请求。服务器带着cookie去找服物器,JSESSIONID能对上号,就是在同一个会话中,没有对上号,新建一个sesion(又是一个新的会话)
(9)思考1:我们现在设置只有登陆成功的的人才能访问到其他的界面,否则返回登陆界面?
答:解决1:在servlet中,如果从数据库能返回真值,说明登陆成功,此时获取一个session,把name放到session.然后再每个页面 用session都获取一下这个值
如果等于null,则转向登陆界面
解决2:在servlet中,如果从数据库能返回真值,说明登陆成功,此时创建一个cookie,把name放到cookie.然后再每个页面 用cookie都获取一下这个值
如果等于null,则转向登陆界面
思考2:如果在登陆页面有,“免登陆一周”这个选项,怎么实现?
答:此时你发会发现session的的能力是有限的,一我们这期间有可能会关掉浏览器,session设置的链接时间可能会失效(那么每次新登陆一下界面
都会重新新建一个session,达不到这样的要求(除非有人不关掉浏览,设置session的过期为七天,也是能实现的)
但是我们的cookie能在硬盘上保存7天啊! 因为我们没有禁止cookie的话,他会在请求服务器的时候带上cookie。如果有这个name值得cookie
则直接转到首页。同样,每个页面也会放行。
作者:sky_sea_desert_me
来源链接:https://blog.csdn.net/sky_sea_desert_me/article/details/53142470