为什么会有cookie和session
http是无状态的协议,客户每次读取web页面时,服务器都打开新的会话,而且服务器也不会自动维护客户的上下文信息,那么要怎么才能实现网上商店中的购物车呢,session和cookie就是一种保存上下文信息的机制。
Cookie
cookie 在web开发中是用来维系状态的一种技术,可以实现记住用户名、密码这些参数的操作,就如每次登陆页面,跳转到其他页面时还是登陆的状态,这就用到了cookie记住用户名密码这一项功能(也就是服务器要向浏览器返回cookie),它的缺点是有安全风险,因为信息是存储在浏览器端的。
创建Cookie
***服务器要向浏览器返回cookie
***浏览器再发送请求时,会把这些cookie值重新发送给服务器
Cookie[] cookies = request.getCookies(); 返回的是一个cookie数组,里面包含各种cookie信息
session
session也是用来维系状态的一种技术,功能和cookie差不多,也是可以用来存储用户名、密码,但是它把这些状态信息存储在服务器端,安全性要比 cookie 高很多,可以用session实现在一个浏览器保持登录状态,不需要重复登录,也可以说是自动登录。
session的应用
存储信息
session默认生命周期
第一次调用 request.getSession() 创建 session对象,如果隔了 30 分钟没有向服务器发送请求,session 会自动失效。
如果要改变失效时间,可以在 web.xml中进行更改。
跟浏览器的关系:一个浏览器对应服务器端的一个 session 对象,他们存储的信息互不干扰
cookie 和 session的区别
请求重定向与请求转发的区别
请求转发
getRequestDispatcher("跳转路径").forward(request, response);
请求重定向
response.sendRedirect("跳转路径");
问题:为何请求转发第一次不能得到保存的cookie的值,刷新后才有, 而请求重定向却可以直接获得值呢?
Cookie保存后需要在下一次请求访问服务器页面时才有效,请求转发并不改变地址,只发送一次请求(相当于没有打开你需要的那个页面,而是留在了转发时的页面),所以cookie此时无效。
请求重定向则是再次向服务器发送请求,也就是说,一个是客户端向服务器端发送的来的,一个是服务器发送到客户端的,也就是Cookie必须通过客户端向服务器发送请求时才能读取到。
解决方法:
如果用请求转发,那就用内置的request对象获得账号密码,如果你用请求重定向,才可以用cookie
怎么选择是重定向还是转发呢?通常情况下转发更快,而且能保持request内的对象,所以他是第一选择。但是由于在转发之后,浏览器中URL仍然指向开始页面,此时如果重载当前页面,开始页面将会被重新调用。如果你不想看到这样的情况,则选择转发。