## (1)什么是Session?
服務器端為了保存用戶的狀態而創建的一個特殊的對象(即session對象)。
當瀏覽器第一次訪問服務器時,服務器會創建session對象(該
對象有一個唯一的id,一般稱之為sessionId),接下來服務器會將
sessionId以cookie的方式發送給瀏覽器。
當瀏覽器再次訪問服務器時,會將sessionId發送過來,服務器
就可以依據sessionId找到對應的sessinon對象。
## (2)如何獲得session對象?
### 1)HttpSession s = request.getSession(boolean flag);
HttpSession是一個接口。
a.當flag為true時,先查看請求當中有沒有sessionId,如果沒有,就會
創建一個session對象。如果有sessionId,就會依據sessionId去查找
對應的session對象,如果找到了就返回該對象,找不到則會創建一個
新的session對象。
b.當flag為false時,先查看請求當中有沒有sessionId,如果沒有,返回
null。如果有sessionId,就會依據sessionId去查找對應的session對象,如果找到了就返回該對象,找不到,返回null。

### 2)HttpSession s = request.getSession();
等價於 request.getSession(true);
## (3)常用方法
session.setAttribute(String name,Object obj);
Object session.getAttribute(String name);
session.removeAttribute(String name);

## (4)session超時
a.什么是session超時?
服務器會將空閑時間過長的session對象刪除掉。
注:
為了節省內存空間。
大部分服務器默認的超時時間長度為30分鍾。
b.如何修改超時時間長度?
方式一 修改web.xml
<session-config>
<session-timeout>30</session-timeout>
</session-config>
方式二 編程的方式
session.setMaxInactiveInterval(int seconds);
設置兩次請求之間最大的時間間隔
## (5)刪除session
session.invalidate();
## (6)session驗證
step1. 登錄成功之后,在session對象上綁訂一些數據,比如
session.setAttribute("user",user);
step2.當用戶訪問需要保護的資源時,進行session驗證,比如
Object obj = session.getAttribute("user");
if(obj == null){
//沒有登錄
response.sendRedirect("login.jsp");
}

## (7)比較session與cookie
session相對於cookie,優點:安全、可以存放大量的數據、支持更豐富的
數據類型。缺點是session會占用服務器端的內存空間,如果session對象
過多,會占用過多的內存空間。
# 練習
寫一個servlet,輸出用戶上一次訪問的時間。如果是第一次訪問,輸出
“你是第一次訪問”。