天天看點

java Cookie+Session實作自動登入

       這是2016年的第一篇blog,首先在這裡祝大家新年工作開心,平平安安

java Cookie+Session實作自動登入

,生活舒心,日子紅紅火火!

       之前我們聊過PHP的自動登入,我們也非常詳細的給大家分析了實作的原理,有了上次課的基礎(PHP自動登入

的連結:http://blog.csdn.net/bayren820/article/details/50397633),相信大家對于今天java實作同樣的功能,就不會

感到特别陌生了,大不了就是文法不一樣,好了,我們開始今天的分享!

       還是老規矩,我們結合代碼,給大家做詳細講解:

       登入界面(就是一個普通的Servlet)

        out.println("<h1>使用者登入</h1>");

        out.println("<form action='/MyCookies/Icookiedeal' method='post'>");

        out.println("使用者名:<input type='text' name='uname'>");

        out.println("密碼:<input type='password' name='upassword'>");

        out.println("<input type='submit' value='送出'>");

        out.println("</form>");

        中間處理頁面(我們重點不是聊資料庫,是以這裡就不連接配接資料庫了)

response.setContentType("text/html");

PrintWriter out = response.getWriter();

        // java接收表單傳遞過來的參數,都是String字元類型

        String uname = request.getParameter("uname");

        String upassword = request.getParameter("upassword");

        // 建立一個Session對象

        HttpSession session = request.getSession();

        if("123".equals(upassword)){

        // session給屬性指派,和PHP裡面的$_SESSION['uname']是一樣的功能

        session.setAttribute("uname", uname);

        // cookie存儲兩周的SessionID,我們說過,這裡Cookie的名字,必須是浏覽器自動傳回的固定名字

                // 因為當我們用這個JSESSIONID的名字存儲Cookie時,伺服器端會自動幫助我們判斷,無需額外代碼

        Cookie cookie = new Cookie("JSESSIONID",session.getId());

        cookie.setMaxAge(2*7*24*3600);

                // 需要response對象,将Cookie寫入本地浏覽器

        response.addCookie(cookie);

        }

        判斷登入狀态,讀取使用者名界面

        HttpSession session = request.getSession();

        // 讀取屬性uname的值,由于我們用Cookie儲存了JSESSIONID的生命周期

        // 是以即使你重新開機了浏覽器,我們依舊能夠在伺服器端SessionID沒有過期之前,擷取到使用者名

        String uname = (String) session.getAttribute("uname");

        if(uname != null){

    out.print(uname+"</h1>");

        }

        大部分的代碼結束了,但是有幾個問題需要注意:

        1.  表單送出中文亂碼問題,由于我們是post送出,是以解決方案十分容易,在中間處理頁面加上一句話即可:

             request.setCharacterEncoding("utf8"),這樣request過來的參數都轉成了utf8編碼,防止了中文亂碼!

        2.Cookie存儲中文亂碼的問題(雖然本次課程沒有涉及到,但是這個知識點我還是準備在這裡分享,以後我們肯

            定會用到的,大家先有個印象),java中預設Cookie存儲中文是會亂碼的,這一點沒有PHP做的好,下面我們

            講講解決辦法:在中間處理頁面,加上一句:java.net.URLEncoder.encode("uname","utf8"),進行Base64轉

            碼;然後在讀取頁面,再加上一句java.net.URLDecoder.decode("uname","utf8"),進行解碼即可!

好了,分享到此結束,今天幹貨真是非常多,大家好好了解!!!預告一下,下次分享的内容:PHP的Yii架構

大家可以關注我的微信公衆号:iwork,我會每天推送一篇原創文章,讓大家都能有所收獲!

java Cookie+Session實作自動登入