1. 程式人生 > 其它 >JavaWeb-Cookie和Session

JavaWeb-Cookie和Session

cookie:存放在客戶端

session:存放在服務端

cookie

package com.th0r.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;

public class Demo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=utf-8");
        
        if (req.getCookies() != null){
            resp.getWriter().print("你上次訪問的時間是:");
            for (Cookie cookie : req.getCookies()) {
                if (cookie.getName().equals("lastLogin")){
                    long l = Long.parseLong(cookie.getValue());
                    Date date = new Date(l);
                    resp.getWriter().print(date.toString());
                }
            }
        } else {
            resp.getWriter().println("這是你第一次訪問");
        }
        //設定cookie
        Cookie cookie = new Cookie("lastLogin", System.currentTimeMillis() + "");
        //設定cookie有效期
        cookie.setMaxAge(2*60*60);
        resp.addCookie(cookie);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

第一次訪問

第二次訪問

  • 一個cookie只能儲存一個資訊
  • 一個web站點可以傳送多個cookie,最多存放20個
  • cookie的大小限制為4kb
  • 瀏覽器的cookie上限為300個

刪除cookie的方法

  • 不設定有效期,關閉瀏覽器,自動失效
  • 設定有效期為0

Session

  • 伺服器會給每一個使用者(瀏覽器)建立一個Seesion物件
  • 一個Seesion獨佔一個瀏覽器,只要瀏覽器沒有關閉,這個Session就存在
  • 使用者登入之後,整個網站它都可以訪向

建立Session

package com.th0r.servlet;

import com.th0r.pro.Person;

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;

public class Demo3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=utf-8");

        HttpSession session = req.getSession();
        session.setAttribute("name", new Person("Bob", 18));
        String sessionId = session.getId();
        if (session.isNew()){
            resp.getWriter().write("Session 建立成功" + sessionId);
        } else {
            resp.getWriter().write("Session 已存在" + sessionId);
            Person person = (Person)session.getAttribute("name");
            resp.getWriter().print("\n"+person);
        }

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

銷燬session

package com.th0r.servlet;

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;

public class Demo4 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=utf-8");

        HttpSession session = req.getSession();
        if (session.getAttribute("name") != null){
            session.removeAttribute("name");
            session.invalidate();
            resp.getWriter().println("登出成功!");
        }else {
            resp.getWriter().println("未登入!");
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

設定時間

web.xml

<session-config>
    <session-timeout>15</session-timeout>
</session-config>