1. 程式人生 > 實用技巧 >Servlet(3):Cookie和Session

Servlet(3):Cookie和Session

一. Cookie

Cookie是客戶端技術,程式把每個使用者的資料以cookie的形式寫給使用者各自的瀏覽器。當用戶使用瀏覽器再去訪問伺服器中的web資源時,就會帶著各自的資料去。這樣,web資源處理的就是使用者各自的資料了

1. 使用cookie記錄使用者上一次訪問的時間

public class CookieTest extends javax.servlet.http.HttpServlet {
boolean flag=false;
protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse
response) throws javax.servlet.ServletException, IOException {

//亂碼問題
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");

//通過使用者請求,檢查它是否帶有cookie
Cookie[] cookies = request.getCookies();
if(flag){
if(cookies!=null){
for (int i = 0; i < cookies.length; i++) {
Cookie

cookie=cookies[i];
if(cookie.getName().equals("lastLoginTime")){
response.getWriter().println("你上次來的時間為:"+cookie.getValue());
}
}
}
}else {
response.getWriter().println("你是第一次來");
}
flag=true;

    <span class="hljs-comment">//服務端建立一個cookie,把這個cookie發給客戶端</span>
    response.addCookie(<span class="hljs-keyword">new</span> <span class="hljs-type">Cookie</span>(<span class="hljs-string">"lastLoginTime"</span>,<span class="hljs-type">System</span>.currentTimeMillis()+<span class="hljs-string">""</span>));
}

<span class="hljs-keyword">protected</span> void doGet(javax.servlet.http.<span class="hljs-type">HttpServletRequest</span> request, javax.servlet.http.<span class="hljs-type">HttpServletResponse</span> response) <span class="hljs-keyword">throws</span> javax.servlet.<span class="hljs-type">ServletException</span>, <span class="hljs-type">IOException</span> {
    doPost(request,response);
}

}

1,第一次訪問時這個Servlet時,效果如下所示:

2,點選瀏覽器的重新整理按鈕,進行第二次訪問,此時就伺服器就可以通過cookie獲取瀏覽器上一次訪問的時間了,效果如下:

二. Session

Session是伺服器端技術,利用這個技術,伺服器在執行時可以為每一個使用者的瀏覽器建立一個其獨享的session物件,由於session為使用者瀏覽器獨享,所以使用者在訪問伺服器的web資源時,可以把各自的資料放在各自的session中,當用戶再去訪問伺服器中的其它web資源時,其它web資源再從使用者各自的session中取出資料為使用者服務

1. session實現原理

//session存入資訊
        //亂碼問題
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("utf-8");
    <span class="hljs-comment">//Session由伺服器自動建立;HttpSession 得到的sessioin物件</span>
    HttpSession session = request.getSession();

    <span class="hljs-comment">//得到sessionID,一次會話,一個seesionID;</span>
    <span class="hljs-built_in">String</span> id = session.getId();
    response.getWriter().println(<span class="hljs-string">"獲得的session的ID:"</span>+id);

    <span class="hljs-built_in">String</span> name=<span class="hljs-string">"學java的閃電俠"</span>;
    <span class="hljs-comment">//向session中存入一個值;</span>
    session.setAttribute(<span class="hljs-string">"name"</span>,name);
    response.getWriter().println(<span class="hljs-string">"存入資訊成功:"</span>+name);

//獲得session存入的資訊
       //亂碼問題
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("utf-8");

        //獲得
        HttpSession session = request.getSession();

        String name = (String) session.getAttribute("name");
        response.getWriter().println("得到的session存入的資訊:"+name);

1,第一次訪問時,伺服器會建立一個新的sesion,並且把session的Id以cookie的形式傳送給客戶端瀏覽器

2,再次請求伺服器,此時就可以看到瀏覽器再請求伺服器時,會把儲存到cookie中的session的Id一起傳遞到伺服器端了

【注意:session.invalidate(); // 通過程式碼登出會話】

三. Session和Cookie的主要區別

  • Cookie是把使用者的資料寫給使用者的瀏覽器
  • Session技術把使用者的資料寫到使用者獨佔的session中
  • Session物件由伺服器建立,開發人員可以呼叫request物件的getSession方法得到session物件