servlet中Session的用法


## (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。
 
![](session.png)
 
### 2)HttpSession s = request.getSession();
 
    等價於 request.getSession(true);
 
## (3)常用方法
    session.setAttribute(String name,Object obj);
    Object session.getAttribute(String name);
    session.removeAttribute(String name);
 
![](count.png)    
 
## (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");
    }
 
![](checklogin.png)
 
 
## (7)比較session與cookie
session相對於cookie,優點:安全、可以存放大量的數據、支持更豐富的
數據類型。缺點是session會占用服務器端的內存空間,如果session對象
過多,會占用過多的內存空間。
 
 
# 練習
寫一個servlet,輸出用戶上一次訪問的時間。如果是第一次訪問,輸出
“你是第一次訪問”。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM