java session工作原理详解,session是什么?

TheDisguiser 2020-06-21 20:40:47 java常见问答 8038

经过上几次的讲解,小伙伴们应该都比较熟悉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的形式发送给客户端浏览器,如图:

java session工作原理详解

此时点击刷新按钮,再次请求服务器,我们就可以看到当浏览器再次请求服务器时,就会把存储到cookie中的session的Id一起传递到服务器端了,如图:

java session工作原理详解

这里,当服务端调用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工具网吧。

推荐阅读:

java session生命周期是多少?该如何设置?

java session属性是指什么?session有哪些属性?

java session中一般放哪些东西?