cookie与session

匿名 (未验证) 提交于 2019-12-02 23:40:02

为什么会有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仍然指向开始页面,此时如果重载当前页面,开始页面将会被重新调用。如果你不想看到这样的情况,则选择转发。

总结

文章来源: https://blog.csdn.net/qq_40303781/article/details/91458116
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!