今天学习了session和cookie的相关内容
一、会话技术
一次会话过程指的是会从打开浏览器到关闭浏览器的过程,在此过程中包含多次请求和响应,会话指的就是这些请求和响应。
由于HTTP是无状态的协议,每一次的请求和响应都是相互独立的。而在实际的操作中,完成一些比较复杂的功能时需要在多次不同的请求和响应之间交互。所以为了使不同请求和响应之间能够交互,便产生了会话技术。
会话技术主要有两类:
cookie
cookie是客户端技术,程序把每个用户的数据以cookie的形式保存到各自客户端浏览器中。当用户使用浏览器再次访问服务器中的web资源的时候,就可以从自己保存的cookie里面获取一些有用信息。
session
session是服务器端技术,服务器在运行时可以为每一个用户的浏览器创建一个独享的session对象。由于session为用户浏览器独享,所有用户在访问服务器的时候,可以把各自的数据放在各自的session中,当用户再次访问服务器中的web资源的时候,其他web资源再从用户各自的session中取出数据为用户服务。
二、cookie的简单使用
cookie是客户端会话技术,将数据保存到客户端。
cookie就是一串字符串,格式就是键值对,用分号隔开。使用cookie时,调用Java自带的相应的API即可。
使用cookie的步骤如下:
创建cookie对象,绑定数据
发送cookie对象
获取cookie对象,得到数据
下面是一个简单实例的完整代码,CookieTest1创建并发送cookie,CookieTest2获取cookie。
- CookieTest1
package com.study.cookieandsessionstudy; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet(name = "CookieTest1", value = "/CookieTest1") public class CookieTest1 extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //创建cookie 注意这里穿的value字符不要加空格,addCookie时是不能使用空格的 Cookie cookie = new Cookie("msg", "hello-world"); //发送cookie response.addCookie(cookie); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }
- CookieTest2
-
package com.study.cookieandsessionstudy; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet(name = "CookieTest2", value = "/CookieTest2") public class CookieTest2 extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取cookie Cookie[] cookies = request.getCookies(); String name; String value; if (cookies != null) { for (Cookie cookie : cookies) { name = cookie.getName(); value = cookie.getValue(); System.out.println("name:" + name); System.out.println("value:" + value); } } } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }
三、session的简单使用
- session是服务器端技术,服务器在运行时可以为每一个用户的浏览器创建一个独享的session对象。
-
session的使用步骤:
获取session对象
使用session存储数据
使用session获取数据
注意session与cookie在使用时的差异,cookie是Cookie对象,而session是HttpSession对象;cookie对象由自己创建,而session对象是获取对象(request.getSession()),而不用自己创建HttpSession对象。下面是一个简单的session案例,SessionTest1存储数据,SessionTest2获取数据。
- SessionTest1
package com.study.cookieandsessionstudy; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; @WebServlet(name = "SessionTest1", value = "/SessionTest1") public class SessionTest1 extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取session HttpSession httpSession = request.getSession(); //存储数据 httpSession.setAttribute("msg", "hello-world"); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }
SessionTest2:
-
package com.study.cookieandsessionstudy; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; @WebServlet(name = "SessionTest2", value = "/SessionTest2") public class SessionTest2 extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取session HttpSession httpSession = request.getSession(); //获取数据 Object object = httpSession.getAttribute("msg"); System.out.println(object); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }