经过上几次的讲解,小伙伴们应该都比较熟悉session了,那你们知道session的工作原理是什么吗?这次小编就为你一一说道。
Session是什么?
是web服务器为了保存用户状态而创建的一个特殊的对象。
当浏览器第一次访问服务器时,服务器就会创建一个session对象(该对象有一个唯一的id,一般称之为sessionId),服务器会将sessionId以cookie的方式发送给浏览器。
当此浏览器再次访问服务器时,就会把sessionId发送过来,服务器就会依据sessionId找到相应session对象。
Session工作原理是什么?
示例如下:
package xdp.gacl.session; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class SessionDemo1 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF=8"); response.setContentType("text/html;charset=UTF-8"); //使用request对象的getSession()获取session,如果session不存在则创建一个 HttpSession session = request.getSession(); //将数据存储到session中 session.setAttribute("data", "孤傲苍狼"); //获取session的Id String sessionId = session.getId(); //判断session是不是新创建的 if (session.isNew()) { response.getWriter() .print("session创建成功,session的id是:" + sessionId); } else { response.getWriter() .print("服务器已经存在该session了,session的id是:" + sessionId); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
当第一次访问时,服务器创建一个新的sesion,并把session的Id以cookie的形式发送给客户端浏览器,如图:
此时点击刷新按钮,再次请求服务器,我们就可以看到当浏览器再次请求服务器时,就会把存储到cookie中的session的Id一起传递到服务器端了,如图:
这里,当服务端调用request.getSession()时,如若是新建session,内部就可能做了如下处理:
//获取session的Id String sessionId = session.getId(); //将session的Id存储到名字为JSESSIONID的cookie中 Cookie cookie = new Cookie("JSESSIONID", sessionId); //设置cookie的有效路径 cookie.setPath(request.getContextPath()); response.addCookie(cookie);
以上就是今天的全部内容了,小伙伴们明白了吗?还需要了解更多java常见问题及答案就快关注奇Q工具网吧。
推荐阅读: