這是2016年的第一篇blog,首先在這裡祝大家新年工作開心,平平安安
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5CanVXYs9CX0xWdhZWZk9CX09Wbl9lcvRXakVGa49CXy9GdpRWZoh3LcRXZu5ibkN3Yuc2bsJmLjlGdhR3cvw1LcpDc0RHaiojIsJye.gif)
,生活舒心,日子紅紅火火!
之前我們聊過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,我會每天推送一篇原創文章,讓大家都能有所收獲!