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物件