亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java的Cookie、Session及kaptcha驗證碼如何使用

發布時間:2022-06-18 13:40:45 來源:億速云 閱讀:149 作者:iii 欄目:開發技術

這篇文章主要講解了“Java的Cookie、Session及kaptcha驗證碼如何使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java的Cookie、Session及kaptcha驗證碼如何使用”吧!

Cookie

1. 概念

服務器通知客戶端保存鍵值對的一種技術。

cookie 是 servlet(服務器) 發送到 Web 瀏覽器(客戶端)的少量信息,這些信息由瀏覽器保存,然后發送回服務器。

客戶端有了 cookie 后,每次請求都發送給服務器

每個 cookie 的大小不能超過 4 KB。

2. 創建Cookie

protected void createCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {    req.setCharacterEncoding("utf-8");    resp.setContentType("text/html;charset=utf-8");    //1. 創建Cookie對象    Cookie cookie = new Cookie("key1", "value1");    //2. 通知客戶端保存    resp.addCookie(cookie);    resp.getWriter().write("Cookie創建成功");}

3. 服務器獲取Cookie

protected void getCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {    req.setCharacterEncoding("utf-8");    resp.setContentType("text/html;charset=utf-8");    Cookie[] cookies = req.getCookies();    for (Cookie cookie : cookies) {        //System.out.println(cookie);        resp.getWriter().write("Cookie["+ cookie.getName() + " = " + cookie.getValue() + "] <br/>");    }    // 查找特定的Cookie  (項目中會把這個寫成工具類)    Cookie need = null;    for (Cookie cookie : cookies) {        if ("key2".equals(cookie.getName())) {            need = cookie;            break;        }    }    if (need != null) { // 不等于null,說明賦過值        resp.getWriter().write("找到了需要的Cookie");    }}

CookieUtils.java

// 查找特定的Cookiepublic static Cookie findCookie(Cookie[] cookies, String name) {    if (cookies == null || name == null || cookies.length == 0) {        return null;    }    for (Cookie cookie : cookies) {        if (name.equals(cookie.getName())) {            return cookie;        }    }    return null;}

4. Cookie的修改

protected void updateCookie(HttpServletRequest req, HttpServletResponse resp) {    // 第一種    // 修改需要先創建同key的Cookie對象,新值直接構造傳入就行    Cookie newCookie1 = new Cookie("key1", "newValue1");     resp.addCookie(newCookie1); // 保存修改    // 第二種    Cookie newCookie2 = CookieUtils.findCookie(req.getCookies(), "key2");    if (newCookie2 != null) {        newCookie2.setValue("newValue2"); // !注意不支持中文和一些符號,需要的話可以使用BASE64編碼        resp.addCookie(newCookie2);    }}

5. Cookie的生命控制

Cookie的生命控制,即Cookie什么時候銷毀

API:setMaxAge(int expiry)

正值表示 cookie 將在經過該值表示的秒數后過期 (關閉瀏覽器再次訪問還在)負值意味著 cookie 不會被持久存儲,將在 Web 瀏覽器退出時刪除 (默認是負數,-1)0 值表示馬上刪除 cookie。

修改后記得 resp.addCookie(cookie);

6. Cookie的有效路徑Path

有效路徑Path 可以過濾哪些Cookie可以發送給服務器,那些不發。

Path是通過請求的地址來進行有效的過濾

例如:

cookie1 path=/工程路徑

cookie2 path=/工程路徑/abc

請求地址: (默認是當前的工程路徑)

http://ip:port/工程路徑/a.html 則cookie1會發送給服務器,cookie2不發送

http://ip:port/工程路徑/abc/d.html cookie2,cookie1都發送!!

Cookie cookie = new Cookie("path2", "path2");cookie.setPath(req.getContextPath() + "/abc"); //  ->  /工程路徑/abc

7. Cookie應用-免用戶名密碼登錄

前端:login.jsp

<form action="/dynamicobject/loginServlet" method="post">    用戶名: <input type="text" name="username" value="${cookie.username.value}"> <br/>    密碼: <input type="password" name="password" value="${cookie.password.value}"> <br/>    <input type="submit" value="登錄"></form>

后端:LoginServlet.java

public class LoginServlet extends HttpServlet {    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) {        String username = req.getParameter("username");        String password = req.getParameter("password");        // 這里可以去數據庫查找,我們這里寫死了        if ("sutong".equals(username) && "123456".equals(password)) {            Cookie c1 = new Cookie("username", username);            c1.setMaxAge(60 * 60 * 24 * 7); // 一周內有效            resp.addCookie(c1);            Cookie c2 = new Cookie("password", password); // 一般密碼都會加密的            c2.setMaxAge(60 * 60 * 24 * 7);            resp.addCookie(c2);            System.out.println("登陸成功!");        } else {            System.out.println("登陸失敗!");        }    }}

Session

1. 概念

Session是一個接口(HttpSession),就是會話。

用來維護一個客戶端和服務器之間關聯的一種技術。

每個客戶端都有它自己的一個Session。

Session會話中,我們經常用來保存用戶登錄之后的信息。

2. 創建和獲取Session

創建和獲取都是一個函數 request.getSession()

第一次調用是創建Session,之后調用都是獲取前面創建好的Sesson會話對象

isNew() : 判斷是不是剛創建出來的(是不是新的)

getId() : 每個會話都會有個唯一id值

protected void createOrGetSession(HttpServletRequest req, HttpServletResponse resp) throws IOException {    req.setCharacterEncoding("utf-8");    resp.setContentType("text/html;charset=utf-8");    HttpSession session = req.getSession(); // 創建或獲取Session    boolean flag = session.isNew(); // 判斷是否剛創建    String id = session.getId(); // id    resp.getWriter().write("得到的Session的Id是" + id + "<br/>");    resp.getWriter().write("這個Session是否剛創建" + flag);}

3. Session域數據的存取

存取:

HttpSession session = req.getSession();session.setAttribute("key1", "value1");

獲取:

String att = (String) req.getSession().getAttribute("key1");  // 返回的是Object

4. Session的生命周期的控制

API:public void setMaxInactiveInterval(int interval)

設置Session的超時時間(秒為單位),超過時長就會被銷毀(是最大不活躍間隔!)

正數是超時時長,負數是永不超時。注意:0不是立即銷毀,立即銷毀是session.invalidate()

獲取方法:public int getMaxInactiveInterval()

默認是1800秒,即半小時。

因為在Tomcat的服務器的配置文件web.xml中,有寫<session-timeout>30</session-timeout>

如果我希望我們工程的Session不想是30分鐘,可以在自己項目下的web.xml做以上相同的配置,就可以修改工程下所有Session的默認超時時長了。

<session-config>    <session-timeout>20</session-timeout> <!-- 分鐘為單位--></session-config>

如果只想修改個別Session的超時時長,則需要使用session.setMaxInactiveInterval(interval) 方法

超時時長:指的是客戶端兩次請求的最大間隔時長!!

5. 瀏覽器和Session的關聯

當客戶端沒有Cookie信息的時候,發送請求,服務器會(調用req.getSession())創建Session對象,每次創建Session會話的時候,都會創建一個Cookie對象,這個Cookie對象的key永遠是:JSESSIONID,value是新創建出來的Session的Id。然后通過響應頭返回給客戶端。

當客戶端有了這個Cookie之后,每次請求會把Session的Id以Cookie的形式發送給服務器,然后服務器這邊會通過Id查找自己之前創建好的Session對象(調用req.getSession()),并返回。

如果上次創建的Session的沒過期的時候,我們手動把Cookie信息刪掉的話,服務器就沒法通過得到id,就沒法找到之前的那個Session對象,客戶端發送請求的時候,服務器則會重新創建新的Session會話,重復上面的操作。

Session 技術,底層其實是基于 Cookie 技術來實現的

kaptcha驗證碼

驗證碼可以解決表單重復提交的情況

1. 使用

我們可以使用第三方的jar包,谷歌驗證碼,kaptcha-2.3.2.jar

導包在 web.xml 中去配置用于生成驗證碼的Servlet程序 (即com.google.code.kaptcha.servlet.KaptchaServlet這個類,谷歌寫的)

<servlet>    <servlet-name>KaptchaServlet</servlet-name>    <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class></servlet><servlet-mapping>    <servlet-name>KaptchaServlet</servlet-name>    <!-- 注意這里改的訪問名(看起來像個圖片),這樣的話訪問這個就是自動生成驗證碼和圖片,并保存到Session域-->     <url-pattern>/kaptcha.jpg</url-pattern> </servlet-mapping>

在表單中使用 img標簽去顯示驗證碼并使用它

<form action="" method="post">    用戶名:<input type="text" name="username"> <br/>    密碼:<input type="password" name="password"> <br/>    驗證碼:<input type="text" name="code"> <br/>    <img id="code_img" src="http://localhost:8080/book/kaptcha.jpg" alt="圖片找不到"> <br/>    <input type="button" value="注冊"></form>

在服務器獲取谷歌生成的驗證碼和客戶端發來的驗證碼比較使用 (獲取后記得馬上刪除)

獲取谷歌生成的驗證碼 :req.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);

獲取用戶提交的驗證碼:req.getSession().getAttribute("code")

2. 驗證碼的切換

// 給驗證碼圖片綁定單機事件$("#code_img").click(function () {    // 但這樣每次發一樣的請求,可能會被瀏覽器的緩存導致驗證碼無法改變,    // 緩存是根據工程名后面的資源名和參數產生的,所以我們可以在后面加上一個隨機的參數跳過緩存//this.src = "http://localhost:8080/book/kaptcha.jpg";         this.src = "http://localhost:8080/book/kaptcha.jpg?d=" + new Date(); // 可以加個時間戳});

感謝各位的閱讀,以上就是“Java的Cookie、Session及kaptcha驗證碼如何使用”的內容了,經過本文的學習后,相信大家對Java的Cookie、Session及kaptcha驗證碼如何使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

侯马市| 兴海县| 连平县| 辽阳市| 天台县| 中方县| 兴山县| 云梦县| 高碑店市| 松滋市| 虞城县| 襄城县| 尉氏县| 东港市| 丽江市| 蒙城县| 盐津县| 通河县| 兴仁县| 宝清县| 登封市| 水富县| 景宁| 松溪县| 获嘉县| 卢龙县| 常山县| 宜兴市| 奉节县| 玉林市| 汶川县| 芒康县| 同心县| 聂荣县| 东安县| 南丰县| 洛宁县| 苏尼特左旗| 潜山县| 大同市| 六枝特区|