Cookie和Session 登录
Cookie 實現免登陸和Session
01、 需求說明
完成用戶登錄功能
登錄成功后跳到成功頁面,顯示用戶名
登錄失敗可以跳回登錄頁面
登錄成功后后續操作均能顯示當前登錄的用戶名
02、完成代碼
DologinServlet.java
@Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解決中文亂碼req.setCharaterEncoding("utf-8");//[1]接受頁面(前臺的頁面)的數據String uname = req.getParameter("uname");String pwd = req.getParameter("pwd");String ch = req.getParameter("ch");//[2]數據的處理--連接數據庫作比較返回結果boolean flag=false;if("是下他".equals(uname)&&"123".equals(pwd)){flag=true;}//[3]根據返回的結果給用戶做出響應if(flag){/**********Session實現歡迎xx登錄***********///[A]獲得session對象HttpSession session = req.getSession();//[B]把對應的值保存到session中session.setAttribute("uname",uname);/**********使用Cookie記住密碼的操作***********///[1]申請卡片 填寫卡片的信息//把uname 中文的字符串進行UTF-8格式的編碼Cookie cookie=new Cookie("u",URLEncoder.encode(uname, "utf-8"));Cookie cookie2=new Cookie("p",pwd);//[2]規定卡片的使用規則//指定卡片的使用范圍 --/ 在當前服務器內都有效 /servlet04--只在當前項目中有效cookie.setPath("/");cookie2.setPath("/");//設置Cookie的有效的時間if("yes".equals(ch)){//勾選了記住我操作//設置cookie 有效的時間cookie.setMaxAge(60*60*24*10);cookie2.setMaxAge(60*60*24*10);}else{cookie.setMaxAge(0);cookie2.setMaxAge(0);}//[3]把卡片交給到用戶手中resp.addCookie(cookie);resp.addCookie(cookie2);//登錄成功resp.sendRedirect("/servlet04/success.jsp");}else{//登錄失敗req.setAttribute("msg","用戶名和密碼不匹配");req.getRequestDispatcher("/login.jsp").forward(req,resp);} }Login.jsp
<body><%String uname="";String pwd="";String ch="";//獲得所有本地Cookie 內容Cookie[] cookies = request.getCookies();if(cookies!=null){for(Cookie c :cookies){if("u".equals(c.getName())){// c--代表的就是用戶名對應的Cookie對象uname= URLDecoder.decode(c.getValue(),"utf-8");ch="checked";}if("p".equals(c.getName())){// c--代表的就是密碼對應的Cookie對象pwd= c.getValue();}}}%><h3>登錄頁面</h3><form action="DoLogin"><p>用戶名:<input type="text" id="uname" name="uname" value="<%=uname%>"/></p><p>密碼:<input type="text" name="pwd" value="<%=pwd%>"/></p><p><input type="checkbox" name="ch" value="yes" <%=ch%> />記住密碼</p><p><input type="submit" value="登錄"/></p></form> </body>success.jsp(登錄成功界面)
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>$Title$</title><base href= "<%=request.getContextPath() + "/" %>" </head> <body><h3>成功頁面<h3>輸出的值:<%String uname = (String)session.getAttribute("uname");out.print(uname);%><hr/><a href= "update.jsp" >update.jsp</a><hr/>JsessionID<%=session.getId() %></body> </html>update.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>update.jsp</title><base href= "<%=request.getContextPath() + "/" %>" </head> <body><h3>成功頁面<h3>輸出的值:<%String uname = (String)session.getAttribute("uname");out.print(uname);%><hr/><a href= "delete.jsp" >delete.jsp</a><hr/>JsessionID<%=session.getId() %></body> </html>delete.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>delete.jsp</title><base href= "<%=request.getContextPath() + "/" %>" </head> <body><h3>成功頁面<h3>輸出的值:<%String uname = (String)session.getAttribute("uname");out.print(uname);%><hr/>JsessionID<%=session.getId() %></body> </html>03、理解示意圖
cookie
session
04、Session 的失效時機
[1]Session.invalidate()
[2]超過最大非活動間隔時間
[3]關閉瀏覽器(該方式沒有立刻結束session)
session失效的方式
[1]手動注銷sesison
session.invalidate();
[2]超過session 活動的有效時間
Session 最大活動時間是30分鐘,我們可以更改這個默認的時間
A、更改TomCat中web.xml中的配置
影響的是:所有項目中的所有session
B、更改自己項目的web.xml
影響的是:當前項目的所有session
C、更改當前項目的當前session 失效的時間
session.setMaxInactiveInterval(10);
[3]關閉瀏覽器
這種紅方式只是把瀏覽器中保存到cookie 中的Jsession 給清除了
保存到服務器中的session并沒有真正的消失
05、Session和Cookie的區別
cookie數據存放在客戶端,session數據放在服務器上(sessionid可以通過cookie保存在客戶端,也可以使用URL重寫方式)
cookie不是很安全(可以加密),別人可以分析存放在本地的COOKIE并進行COOKIE欺騙,考慮到安全應當使用session
session會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能,考慮到減輕服務器性能方面,應當使用COOKIE
單個cookie在客戶端的限制是3K,就是說一個站點在客戶端存放的COOKIE不能3K。
Cookie的數據都以字符串的形式保存。Session中可以保存對象信息。
典型使用
Cookie:記住我 最近瀏覽商品 網頁皮膚
session:登錄信息 購物車(也可以使用Cookie)
總結
以上是生活随笔為你收集整理的Cookie和Session 登录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 12000台式电脑配置?
- 下一篇: Ajax判断用户名是否可用