cookie概述及cookie實現10天內免登陸功能


cookie的作用:

cookie用於保存會話狀態到客戶端。保留在以下兩個地方:

  • 瀏覽器的緩存中;
  • 客戶端硬盤文件中。

cookie在java中被當作一個類來處理:javax.servlet.http.Cookie;

cookie不僅僅存在於Java中,只要是web開發,B/S架構,只要是基於http協議,就有cookie。

常見的功能:保留購物車上的商品,多天免登陸.......

1.將cookie存放在瀏覽器緩存中

cookie對象可以通過構造方法直接創建,由兩部分組成,name和value;

//第一個參數為cookie名字,第二個參數為cookie的值
new Cookie(String,String);

這種方式創建的cookie會保存在瀏覽器緩存中,瀏覽器關閉,則cookie消失。

當瀏覽器發起請求時,服務器就會給瀏覽器發送一個cookie,可以發送多個,客戶端也可以獲取到服務器端發送的cookie:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>cookie</title>
</head>
<body>
    <a href="/servlet_01_javaweb/cookie01">服務器發送cookie給客戶端瀏覽器</a>
</body>
</html>
package com.dh.cookie;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class Cookie01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie cookie1 = new Cookie("cookie1", "value1");
        //服務器發送cookie
        response.addCookie(cookie1);
        //客戶端可以獲取cookie
        Cookie[] cookies = request.getCookies();
        for (Cookie cookie : cookies) {
            //獲取cookie的名字
            String cookieName = cookie.getName();
            //獲取cookie的值
            String cookieValue = cookie.getValue();
            System.out.println(cookieName + "=" + cookieValue);
        }
    }
}

cookie和訪問的路徑有關系。

cookie會和特定的路徑綁定在一起,第一次請求,服務器會給客戶端瀏覽器發送cookie,只要沒有結束這次會話,再次請求了特定路徑,客戶端瀏覽器就會攜帶綁定的cookie一起發送給服務器。

如:

上述第一次訪問:http://localhost:8080/servlet_01_javaweb/cookie01時,服務器會向客戶端發送cookie,再次輸入http://localhost:8080/servlet_01_javaweb/+任意都會再一次的發送該cookie

設置cookie關聯的路徑

Cookie cookie1 = new Cookie("cookie1", "value1");
//在發送cookie之前可以指定cookie關聯路徑
cookie1.setPath(request.getContextPath()+"/a");
//服務器發送cookie
response.addCookie(cookie1);

此時,只有訪問與http://localhost:8080/servlet_01_javaweb/a有關的路徑,客戶端才能發送特定的cookie給服務器。

2.將cookie保存在瀏覽器硬盤文件中

只要設置cookie的有效時長,並且有效時長>0時,cookie被保存到客戶端的硬盤文件中。

Cookie cookie1 = new Cookie("cookie1", "value1");
cookie1.setMaxAge(60 * 60);//單位為秒,即將cookie的有效時長設置為1小時
response.addCookie(cookie1);

當cookie保存到了客戶端的硬盤文件中,關閉瀏覽器也不會清除cookie,只有到了有效時間cookie才會被清除。

但是可以自己刪除cookie:

將cookie的有效時間設置為0,即為刪除cookie。

//刪除cookie
cookie1.setMaxAge(0);

3.cookie實現10天免登陸

先捋一下邏輯:

當用戶輸入一個地址的時候,先判斷是否攜帶cookie,如果攜帶了cookie再判斷cookie的值,再判斷用戶名和密碼是否正確,如果都正確的話就直接跳轉到主頁,不需要登陸;

如果沒有攜帶cookie信息的話,就直接跳轉到登陸頁面,第一次登陸成功,如果勾選了十天免登錄,服務器就發送cookie,設置有效時間,保存到客戶端硬盤文件中。

web.xml:

<!--    設置歡迎頁面-->
<welcome-file-list>
    <welcome-file>checkLogin</welcome-file>
</welcome-file-list>
<!--    登陸-->
<servlet>
    <servlet-name>login</servlet-name>
    <servlet-class>com.dh.cookie.Login</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>login</servlet-name>
    <url-pattern>/login</url-pattern>
</servlet-mapping>
<!--    檢查是否攜帶cookie-->
<servlet>
    <servlet-name>checkLogin</servlet-name>
    <servlet-class>com.dh.cookie.CheckLogin</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>checkLogin</servlet-name>
    <url-pattern>/checkLogin</url-pattern>
</servlet-mapping>

登陸頁面:lg.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登陸頁面</title>
</head>
<body>
    <form action="/servlet_01_javaweb/login" method="post">
        用戶名:<input name="username" type="text"><br>
        密碼:<input name="password" type="password"><br>
        <input name="tenDays" type="checkbox" value="ok">十天內免登陸<br>
        <input type="submit" value="登陸">
    </form>
</body>
</html>

登陸成功頁面:success.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>success</title>
</head>
<body>
    登陸成功!
</body>
</html>

登陸失敗頁面:fail.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>fail</title>
</head>
<body>
    用戶名或密碼錯誤,請
    <a href="/servlet_01_javaweb/lg.html">重新登陸</a>
</body>
</html>

CheckLogin

package com.dh.cookie;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class CheckLogin extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //獲取cookie
        Cookie[] cookies = request.getCookies();
        //取出cookie中的值
        String username = null;
        String password = null;
        for (Cookie cookie : cookies) {
            String cookieName = cookie.getName();
            if("username".equals(cookieName)){
                username = cookie.getValue();
            }
            if("password".equals(cookieName)){
                password = cookie.getValue();
            }
        }
        if("zhangsan".equals(username) && "123".equals(password)){
            response.sendRedirect("/servlet_01_javaweb/success.html");
        }else {
            response.sendRedirect("/servlet_01_javaweb/lg.html");
        }
    }
}

Login:

package com.dh.cookie;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class Login extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String tenDays = request.getParameter("tenDays");
        //此處不連接數據庫
        //用戶名和密碼正確
        if ("zhangsan".equals(username) && "123".equals(password)) {
            if ("ok".equals(tenDays)) {
                //將用戶信息存儲到cookie中,並且關聯路徑和設置有效時間
                Cookie cookie1 = new Cookie("username", username);
                Cookie cookie2 = new Cookie("password", password);
                cookie1.setPath(request.getContextPath());
                cookie2.setPath(request.getContextPath());
                cookie1.setMaxAge(60 * 60 * 24 * 10);
                cookie2.setMaxAge(60 * 60 * 24 * 10);
                //服務器發送cookie給客戶端瀏覽器
                response.addCookie(cookie1);
                response.addCookie(cookie2);
            }
            //跳轉到主頁
            response.sendRedirect("/servlet_01_javaweb/success.html");
        } else {
            //跳轉到登陸失敗頁面
            response.sendRedirect("/servlet_01_javaweb/fail.html");
        }
    }
}

以上就能實現10天內免登錄了。登陸成功后,關閉瀏覽器,輸入http://localhost:8080/servlet_01_javaweb/就能直接跳轉到success.html了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM