java的會話技術和session


1、會話技術
(1)從打開一個瀏覽器訪問某個站點,到關閉這個瀏覽器的整個過程,成為一次會話。
注:瀏覽器沒關,只關閉一個網頁不算會話結束;
(2)分類:cookie和session
2、cookie:客戶端本地;客戶端可以清除cookie;安全性不好;減輕服務器存儲壓力;

 


(1)服務器向客戶端發送一個cookie:響應頭set-cookie
   1)創建cookie;Cookie cookie = new Cookie(String Name,String Value);
       鍵值對;set-cookie響應頭;別寫中文;
   2)設置持久化時間:cookie.setMaxAge(60*10)里面的單位是秒;
     不設置存儲在瀏覽器內存中,關閉后銷毀,設置后持久化到瀏覽器的磁盤文件;超過時間自動銷毀;
3)設置攜帶路徑:cookie.setPath(String path);
     注:("/")任何路徑都可以;("/web05")web05下的所有路徑都可以;
    不設置cookie信息會在訪問產生該cookie的web資源所在的路徑都攜帶cookie信息;
    舉例:cookie信息在web05的sendcookie里,那么訪問完sendcookie后,訪問web05下的其他項目也會有此cookie信息;
4)發送cookie:response.addCookie(Cookie cookie);

package com.oracle.cookie;

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

public class cookieServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        //1、創建cookie對象
        Cookie cookie = new  Cookie("goods","xsphone");
        //設置cookie持久化時間----------在硬盤上保存的時間
        cookie.setMaxAge(60);
        //為cookie設置攜帶路徑
        //cookie.setPath("/Day20/cookieServlet");
        //cookie.setPath("/Day20");
        //2、存儲數據發送到客戶端
        response.addCookie(cookie);
        response.getWriter().write("hello world!");
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

效果如下:

 


5)刪除cookie:使用同名同路徑的持久化時間為0的cookie進行覆蓋;必須是同名同路徑;

package com.oracle.cookie;

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

public class removecookieServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        //創建一個cookie
        Cookie cookie = new  Cookie("goods","xsphone");
        cookie.setPath("/Day20");
        cookie.setMaxAge(0);
        response.addCookie(cookie);
        response.getWriter().write("hello world!");
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

重新設置時間操作顯示如下:

 

(2)服務器接收客戶端cookie:請求頭cookie
1)獲取所有的cookie:Cookie[] cookies = request.getCookies();
2)遍歷Cookie數組:
for(Cookie cookie : cookies){
if(cookie.getName().equal(cookieName)){String cookieValue = cookie.getValue();}}

注意先訪問cookieServlet!

package com.oracle.cookie;

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

public class getcookieServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        //先獲取裝有cookie對象的數組
        Cookie[]  cookie = request.getCookies();
        for(Cookie  c:cookie){
            if(c.getName().equals("goods")){
                System.out.println(c.getValue());
            }
        }
        response.getWriter().write("hello world!");
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

效果如下:

控制台打印輸出:

 


3、session:服務器;安全性好;加重服務器存儲壓力;

 


(1)獲得Session對象:HttpSession session = request.getSession();
!!!在一個瀏覽器中sessionid是同一個;根據sessionid判斷是否存在;
(2)設置session持久化時間:Cookie cookie = new Cookie("JSESSIONID",request.getSession().getId());cookie.setMaxAge(60*10);
本質是設置cookie;
(3)session也是一個域對象;三個方法;

package com.oracle.seesion;

import java.io.IOException;
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 javax.servlet.http.HttpSession;

public class session extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        HttpSession  session = request.getSession();
        String   id = session.getId();
        session.setAttribute("goods", "shouji");
        //設置JSESSIONID的持久化時間
        Cookie  cookie = new  Cookie("JSESSIONID",id);
        cookie.setPath("/Day20");
        cookie.setMaxAge(60*2);
        response.addCookie(cookie);
        response.getWriter().write(id);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

效果如下:

 

不關閉瀏覽器的情況下,訪問第二個servlet:

package com.oracle.seesion;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class seesion extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        HttpSession  session = request.getSession();
        String   id = session.getId();
        HttpSession  session1 = request.getSession();
        String   id1 = session1.getId();
        String name = (String)session.getAttribute("goods");
        response.getWriter().write(id+".."+id1);
        response.getWriter().write(name);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

效果如下:

 

!!!可以看出ID都是一樣的;
(4)session生命周期:第一次執行request.getSession()時創建;服務器(非正常)關閉時或者session過期/失效(默認30分鍾)銷毀;
(5)設置session銷毀時間:從不操作服務器端的資源開始計時默認30分鍾;session.invalidate();web.xml配置;


免責聲明!

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



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