How is HttpSession Stored in the Servlet Framework
这是一个很好的补救问题。我以前没有用过
1 2 3 4 5 6 | public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { // get current session, or initialise one if none HttpSession sess = req.getSession(true); } |
我的问题是,如何存储会话?在客户身上?在过去,我习惯于存储会话服务器/数据库端。这是怎么工作的?如果我在给定的请求上更新会话,这是否总是通过后续调用反映出来?会话是否存储在客户端上?
使用会话cookie,或者如果禁用cookie,则可以看到指示灯
how does the session get stored? On the client? In the past I have
been accustomed to storing the session server / database side. How
does this work?
会话可以定义为服务器端存储的信息,这些信息在用户与网站或Web应用程序的整个交互过程中都需要保持。
Is the session stored on the client?
与通过cookie在用户浏览器中存储大量不断变化的信息不同,客户端只存储一个唯一的标识符(称为"会话ID")。每次浏览器发出HTTP请求(即页面链接或Ajax请求)时,都会将此会话ID传递给Web服务器。Web应用程序将此会话ID与其内部数据库配对,并检索存储的变量以供请求的页面使用。
当调用getSession()方法时,它会返回会话(如果存在的话),否则它会创建一个新的会话。除了创建一个会话之外,它还会做5件你不能做的事情。
1 | All the cookie work happens behind the scenes. |
If I update the session on a given request, will that
always be reflected through subsequent calls?
是的,它会影响后续调用。
httpsession默认存储在内存中,由Web服务器(jetty、tomcat等)创建/维护。根据您使用的Web服务器的不同,您可能可以选择将会话信息存储到数据库中。
以下是会话管理器的Tomcat文档[1]
[1]https://tomcat.apache.org/tomcat-7.0-doc/config/manager.html