1. 程式人生 > 實用技巧 >WPF DockLayoutManager佈局後的佈局重置

WPF DockLayoutManager佈局後的佈局重置

什麼是Cookie?

Cookie是一種儲存在遠端客戶端並以此來跟蹤和識別使用者的機制。
Cookies是伺服器在本地機器上儲存的小段文字並隨每一個請求傳送至同一個伺服器

  網路伺服器用HTTP頭向客戶端傳送Cookies,在客戶終端,瀏覽器解析這些Cookies並將它們儲存為一個本地檔案,它會自動將同一伺服器的任何請求縛上這些Cookies。

具體來說Cookie機制採用的是在客戶端保持狀態的方案。它是在使用者端的會話狀態的存貯機制,他需要使用者開啟客戶端的Cookie支援。

Cookie的作用就是為了解決HTTP協議無狀態的缺陷所作的努力。(HTTP無狀態協議是指協議對於事務處理沒有記憶能力。

缺少狀態意味著如果後續處理需要前面的資訊,則它必須重傳,這樣可能導致每次連線傳送的資料量增大。另一方面,在伺服器不需要先前資訊時它的應答就較快。)

1、Cookie 翻譯過來是餅乾的意思。
2、Cookie 是伺服器通知客戶端儲存鍵值對的一種技術。
3、客戶端有了 Cookie 後,每次請求都發送給伺服器。
4、每個 Cookie 的大小不能超過 4kb

Cookie可以做什麼

簡單的說,cookie是web伺服器暫時儲存在使用者硬碟上的一個文字檔案,並隨後被web瀏覽器讀取。當用戶再次訪問web網站時,網站通過讀取cookie檔案記錄這位訪客的特定資訊,
從而迅速做出響應,如在頁面中不需要輸入使用者的id和密碼即可直接登入網站。

也就是客戶端儲存了伺服器生成的cookie之後,下次訪問攜帶這個cookie就是你的身份牌,可不用輸入使用者名稱密碼就可登陸

如何建立 Cookie

建立cookie

1.建立cookie
Cookie cookie = new  cookie("key","value"2.通知客戶端儲存cookie
resp.addCookie(cookie)

CookieServlet

  protected void createCookie(HttpServletRequest req, HttpServletResponse resq) throws IOException {
        //1.建立cookie
        Cookie cookie = new Cookie("key1
","value1"); // 2.通知客戶端儲存cookie resq.addCookie(cookie); Cookie cookie1 = new Cookie("key2","value2"); resq.addCookie(cookie1); //前端介面列印 resq.getWriter().write("cookie建立成功"); }

伺服器如何獲取 Cookie

伺服器獲取客戶端的 Cookie 只需要一行程式碼:req.getCookies():Cookie[]

獲取cookie :getCookies()獲取的是Cookie[] 陣列

    /**
     * 獲取前端傳遞來的cookie
     * @param req
     * @param resp
     * @throws IOException
     */
    protected  void findCookie(HttpServletRequest req,HttpServletResponse resp) throws IOException {

        //1:獲取前端傳遞來的cookies陣列
        Cookie [] cookies = req.getCookies();
        
        Cookie iWantCookie = null;
        //迴圈判斷要找的cookie
        for (Cookie cookie : cookies) {
            if("key2".equals(cookie.getName())){
                iWantCookie = cookie;
                break;
            }
        }

        if(iWantCookie != null){
            resp.getWriter().write("獲取到cookie"+iWantCookie.getName()+"="+iWantCookie.getValue());
        }
    }

我們可以將獲取cookie的操作封裝成utils類

/**
     * 查詢指定的cookie物件
     * @param name  要查詢的cookie物件
     * @param cookies  前端傳遞來的cookie陣列
     * @return
     */
    public static Cookie findCookie(String name,Cookie [] cookies){
        if(name== null || cookies == null || cookies.length == 0 ){
            return  null;
        }
        for (Cookie cookie : cookies) {
            if(name.equals(cookie.getName())){
                return cookie;
            }
        }
        return null;
    }

這個時候的CookieServlet中的獲取cookie可以改為

/**
     * 使用CookieUtil工具類來找cookie物件
     * @param req
     * @param resq
     * @throws IOException
     */
    protected void findCookieOne(HttpServletRequest req,HttpServletResponse resq) throws IOException {
        Cookie [] cookies = req.getCookies();
        Cookie iWantCookie = CookieUtil.findCookie("key2",cookies);

        if(iWantCookie != null){
            resq.getWriter().write("找到cookie2"+"Cookie:"+iWantCookie.getName()+"="+iWantCookie.getValue());
        }else {
            resq.getWriter().write("沒有找到cookie2");
        }

    }

Cookie 值的修改

方案一:
1、先建立一個要修改的同名(指的就是 key)的 Cookie 物件
2、在構造器,同時賦於新的 Cookie 值。
3、呼叫 response.addCookie( Cookie );
  /**
     * 修改cookie的值
     * @param req
     * @param resq
     * @throws IOException
     */
    protected void setCookie(HttpServletRequest req,HttpServletResponse resq) throws IOException {
        Cookie cookie = new Cookie("key1","setValue1");
        resq.addCookie(cookie);
        resq.getWriter().write("修改好了cookie");
    }

方案二

方案二:
1、先查詢到需要修改的 Cookie 物件
2、呼叫 setValue()方法賦於新的 Cookie 值。
3、呼叫 response.addCookie()通知客戶端儲存修改

protected void setCookie(HttpServletRequest req,HttpServletResponse resq) throws IOException {
        Cookie [] cookies = req.getCookies();
//        1、先查詢到需要修改的 Cookie 物件
        Cookie cookie = CookieUtil.findCookie("key1",cookies);
        if(cookie != null){
            //2、呼叫 setValue()方法賦於新的 Cookie 值。
            cookie.setValue("setValue1");
//            3、呼叫 response.addCookie()通知客戶端儲存修改
            resq.addCookie(cookie);
        }
        resq.getWriter().write("修改好了cookie");

    }

瀏覽器檢視 Cookie:

谷歌瀏覽器如何檢視 Cookie:

火狐瀏覽器如何檢視 Cookie:

Cookie 生命控制

Cookie 的生命控制指的是如何管理 Cookie 什麼時候被銷燬(刪除)

setMaxAge()
    正數,表示在指定的秒數後過期
    負數,表示瀏覽器一關,Cookie 就會被刪除(預設值是-1)
    零,表示馬上刪除 Cookie

.