经过上几次的讲解,小伙伴们应该都比较熟悉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工具网吧。
推荐阅读: