自動登陸

使用cookie實現自動登錄功能

 

1、Web程序中第一次登錄後,再次訪問同一個Web程序時就無需再次登錄,而是直接進入程序的主界面(僅限於本機)。實現這個功能關鍵就是服務端要識別客戶的身份。而用Cookie是最簡單的身從驗證。

如果用戶第一次登錄,可以將用戶名作爲Cookie寫到本地,代碼如下:

2、將用戶名以cookie的方式發送到客戶端,並且將用戶名以session屬性的方式保存到服務器端以保證安全性,最後處理JSESESSIONID使其持久化(以cookie的形式保存到客戶端)當第二次登錄時HTTP響應頭便會出現兩個ID但沒有影響,具體代碼如下:

/*
         * 如果是第一次登錄,將用戶名和密碼作爲cookie寫到本地
         */
        String name = request.getParameter("name");
        String pwd = request.getParameter("password");
        User user = new User();
        String userInfo = user.toString();
        if(null!=name && !"".equals(name)){
            user.setName(name);
        }
        if(null!=pwd && !"".equals(pwd)){
            user.setPassword(pwd);
        }
        Cookie cookie = new Cookie("user",userInfo);
        cookie.setMaxAge(360*24*60);//設置一年有效期
        cookie.setPath("/");//可在同一應用服務器內共享方法
        response.addCookie(cookie);//放鬆到客戶段
        //憑這個Cookie就自動登錄並不安全可以在服務端使用一個Session來管理用戶。
        //當第一次登錄成功後,就創建一個Session,並將用戶的某些信息保存在Session
        HttpSession session = request.getSession();
        session.setAttribute("user", userInfo);
        session.setMaxInactiveInterval(3600*2);//2小時
        //但是當cookie關閉後,用於保存SessionID的JSESSIONID會消失(此時cookie並沒有過期) ,所以得將JSESESSION持久化
        Cookie sessionId = new Cookie("JSESESSIONID",session.getId());
        sessionId.setMaxAge(2*60);//設置兩小時
        sessionId.setPath("/");
        response.addCookie(sessionId);
        
        
        
        //當用戶第二次登陸時,檢測這個cookie是否存在
        Cookie[] cookies = request.getCookies();
        for (Cookie cookie2 : cookies) {
            //如果存在這個cookie進行頁面跳轉
            if(cookie2.equals("user")){
                if(session.getAttribute("user")!=null){
                    request.getRequestDispatcher("直接進入主頁面的url").forward(request, response);
                    break;
                }else{
                    //跳轉到登錄頁面
                }
                
            }
        }
         //如果使用上面的代碼,即使瀏覽器關閉,在兩小時之內,Web程序仍然可以自動登錄。
        //如果我們自已加一個JSESSIONID Cookie,在第一次訪問Web程序時,
        //HTTP響應頭有兩個JSESSIONID,但由於這兩個JSESSIONID的值完全一樣,沒有任何影響
        //如果在響應頭的Set-Cookie字段中有多個相同的Cookie,則按着path和name進行比較,如果這兩個值相同,
        //則認爲是同一個Cookie,最後一個出現的Cookie將覆蓋前面相同的Cookie

以上內容引用自:https://www.cnblogs.com/zyb136/articles/7153117.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章