Web三大知识——关于session

首先怎么理解session?区别于cookie写在客户端,session是服务器用来为客户端简历保存当前状态的工具,是建立在服务器中的。

两个窗口session ID一样的唯一一种情况是其中一个窗口是另外一个窗口的子窗口
session就是服务器端的一块内存
session不存在cookie那样的路径访问的问题

  • 同一个application下的servlet/jsp可以共享一个session,前提是同一个客户端窗口

session为每个客户端提供独一无二的session id
Web三大知识——关于session_第1张图片
image

session 创建的两种途径:

  • 如果浏览器支持cookie:那通过cookie创建:保存在cookie中,并且是跟窗口相关的cookie中

  • 如果不支持cookie,必须自己编程,URL重写实现,重要的函数:response.encodeURL() 实现转码以及在URL后面加入sessionID这种方法很麻烦,需要在每个URL都用encodeURL重写一次

经常遇到的session已过期,很重要,有时候点击back信息还在,是因为session还在。小例子说明session的几个函数用法:

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;

public class SessionInfoServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession mySession = req.getSession(true);//服务器在这个时候给client设置了一个session
        PrintWriter out = resp.getWriter();
        out.println(mySession.isNew());
        out.println(mySession.getId());
        out.println("session creation time" + new java.util.Date(mySession.getCreationTime()));
        //通过下面语句判断是否应该断开连接
        out.println("last accessed time:"+ new java.util.Date(mySession.getLastAccessedTime()));
        out.println("session id from request:"+req.getRequestedSessionId());
        out.println("session id via cookie:"+req.isRequestedSessionIdFromCookie());
        out.close();
    }
}

你可能感兴趣的:(Web三大知识——关于session)