Java Web如何操作Cookie的新增修改和刪除
一、Cookie是什麼
Cookie是伺服器存放在客戶端瀏覽器上的一些小資料,可以使用Cookie完成與伺服器的一些互動動作。伺服器可以通過HTTP響應頭將Cookie傳送給瀏覽器,而瀏覽器如果支援儲存Cookie,則將HTTP響應頭資訊中的Cookie內容存放到瀏覽器中。當瀏覽器請求訪問一個網站時,如果這個網站在此瀏覽器中存放有Cookie內容,瀏覽器會將Cookie內容附加到HTTP請求頭資訊中傳送給伺服器。鑑於此,Cookie存放的內容是不宜過多的,一般瀏覽器也是這樣規定的。
瀏覽器應該支援每臺 Web 伺服器有 20 個 cookie,總共有 300 個 cookie,並且可能將每個 cookie 的大小限定為 4 KB。
二、Servlet如何建立Cookie物件
Java Web提供了一個Cookie類:javax.servlet.http.Cookie
建立Cookie物件
Cookie是一個類似於鍵值對的資料,通過Cookie的構造方法Cookie(String name, String value)建立一個Cookie物件,不過Cookie與鍵值對資料不同的一點兒是,儲存在瀏覽器中的Cookie物件可以擁有相同的name值,這點兒在後面獲取Cookie物件的時候需要特別注意。
修改Cookie值
建立好Cookie物件後,我們可以通過setValue(String newValue)方法修改值,通過getValue()
新增Cookie描述
為了方便客戶端使用者檢視Cookie資訊,可以通過setComment(String purpose)方法設定一個描述資訊,Cookie還沒有傳送前,通過getComment()方法獲取描述資訊。
設定Cookie有效期和刪除Cookie
存放在客戶端的Cookie是有有效期的,可以通過setMaxAge(int expiry)方法設定這個Cookie可以儲存好長時間,單位為秒,這是一個時間長度,不是一個時間點Timestamp。如果沒有設定有效期,則預設為-1(或者說小於0的值),表示在瀏覽器關閉時就刪除Cookie內容,如果有效期設定為0,則表示通知瀏覽器立即刪除這個Cookie。
設定Cookie作用範圍和域
我們還可以指定Cookie在哪個網頁才有效,通過setPath(String uri)方法即可設定,如果值為“/”表示作用範圍為整個網站,預設是這個值。
另外還可以指定這個Cooke對其他網站有效(也就是不同的域),通過setDomain(String pattern)方法來實現,不過需要注意的是,一般瀏覽器是不允許一個網站設定另外網站的Cookie內容的,所以這個用處不大。實在要做,就需要修改瀏覽器的配置才行。
Cookie中文問題
Cookie有一點兒不好的就是不支援中文,這點兒一定要注意了,如果忘Cookie中添加了中文內容,則系統會丟擲異常內容:
java.lang.IllegalArgumentException: Control character in cookie value, consider BASE64 encoding your value
如果確實需要寫入中文,則需要進行BASE64轉碼才行。在讀取Cookie的時候又需要進行反轉碼。
三、如何向客戶端寫入Cookie
前面說了,Cookie寫入瀏覽器是通過HTTP響應頭帶入的。在Java Web開發中Response物件已經幫我們完成了這個工作,通過Response的addCookie(Cookie cookie)方法就可以向瀏覽器寫入Cookie內容了。一個響應頭可以帶入多個Cookie,所以這個方法也可以多次呼叫,一次寫入多個Cookie。
四、獲取客戶端傳送來的Cookie
跟向瀏覽器寫入Cookie相反,客戶端通過HTTP請求頭將Cookie帶入傳送給伺服器。通過Request.getCookies()方法可以獲取到從客戶端傳送來的Cookie陣列。不過從瀏覽器傳送過來的Cookie物件只有name屬性和value屬性,其他有效期,有效路徑等都是沒有的。而且可以有多個相同的name屬性的,所以判斷是不是我們需要的Cookie需要審慎的。
五、實現程式碼
新增Cookie:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1.建立Cookie物件
Cookie cookie1 = new Cookie("webname", "XCoder Studio");
// 2.配置Cookie物件
cookie1.setComment("Web Host Name"); // Cookie描述
cookie1.setMaxAge(24*60*60); // Cookie有效時間
//cookie1.setPath("/"); // Cookie有效路徑
// 3.通過response物件將Cookie寫入瀏覽器,當然需要解決中文亂碼問題,否則會丟擲異常
// java.lang.IllegalArgumentException: Control character in cookie value, consider BASE64 encoding your value
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
response.addCookie(cookie1);
// 跳轉到首頁
response.sendRedirect("./index.jsp");
}
讀取Cookie:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 讀取Cookie,通過request請求讀取Cookie
Cookie[] cookies = request.getCookies();
// 判斷是否存在Cookie,不存在跳轉到首頁
if (cookies == null) {
response.sendRedirect("./index.jsp");
return;
}
// 處理輸出中文亂碼問題
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
// 獲取輸出物件
PrintWriter out = response.getWriter();
// 迭代處理客戶端傳送來的Cookie物件
for (Cookie cookie:cookies) {
out.println("Cookie名 稱:"+cookie.getName()+"<br />");
out.println("Cookie儲 值:"+cookie.getValue()+"<br />");
out.println("Cookie備 注:"+cookie.getComment()+"<br />");
out.println("Cookie有效時間:"+cookie.getMaxAge()+"<br />");
out.println("Cookie有效路徑:"+cookie.getPath()+"<br />");
out.println("Cookie有效域名:"+cookie.getDomain()+"<br />");
out.println("<a href=\"./CookieDel?name="+cookie.getName()+"\">刪除Cookie</a><br />");
out.println("---------------------------------------------------------<br />");
}
}
刪除Cookie:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 獲取GET傳遞引數名稱
String delName = request.getParameter("name");
if (delName == null) {
response.sendRedirect("./CookieRead");
return;
}
// 獲取Cookies陣列
Cookie[] cookies = request.getCookies();
// 迭代查詢並清除Cookie
for (Cookie cookie: cookies) {
if (delName.equals(cookie.getName())) {
cookie.setMaxAge(0);
response.addCookie(cookie);
}
}
response.setHeader("refresh", "3;./CookieRead");
PrintWriter out = response.getWriter();
out.println("Will go back after 3 seconds...");
}
執行會發現讀取Cookie時,所以的有效時間都是Null的。
相關推薦
Java Web如何操作Cookie的新增修改和刪除
一、Cookie是什麼 Cookie是伺服器存放在客戶端瀏覽器上的一些小資料,可以使用Cookie完成與伺服器的一些互動動作。伺服器可以通過HTTP響應頭將Cookie傳送給瀏覽器,而瀏覽器如果支援儲存Cookie,則將HTTP響應頭資訊中的Cookie內容存放到瀏覽器中。
給jqGrid資料行新增修改和刪除操作連結(可以執行)
我這裡用的不是jqGrid的自帶的編輯和刪除操作,我已經把分頁導航欄下的編輯,刪除,搜尋都取消掉了,就是這句$("#list1").navGrid("#pager1",{edit:false,del:false, search:false}), 然後在資料載入完成後,給每行
關於Cookie 的HttpOnly屬性(java/web操作cookie+Tomcat操作jsessionid)
public class CookieFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOExcept
【C#】C#操作XML方法:新增、修改和刪除節點與屬性
一 前言 先來了解下操作XML所涉及到的幾個類及之間的關係 如果大家發現少寫了一些常用的方法,麻煩在評論中指出,我一定會補上的!謝謝大家 * 1 XMLElement 主要是針對節點的一些屬性進行操作 * 2 XMLDocument 主要是針對節點的CUID操作 *
cookie的封裝和刪除修改
空格 如果 getc += spl dddd lse options 分離 一、設置 name = value; path = 路徑; expires = new Date(); var d = new Date(); d.setDate(30) doc
mongodb修改和刪除操作
修改資料修改裡面還有查詢條件。你要該誰,要告訴 mongo。查詢名字叫做小明的,把年齡更改為 16 歲:1 db.student.update({"name":"小明"},{$set:{"age":16}});查詢數學成績是 70,把年齡更改為 33 歲: 1 db.student.update({"sco
JDBC實現修改和刪除操作
工具:Myeclipse(Eclipse): 知識點:如何防止SQL注入攻擊和JDBC中的修改/刪除操作 jar包: commons-collections4-4.0.jar commons-dbcp-1.4.jar commons-pool-1.6.jar Oracle 1
Linux中新增、修改和刪除使用者和使用者組
一、使用者:在建立使用者時,需要為新建使用者指定一使用者組,如果不指定其使用者所屬的工作組,自動會生成一個與使用者名稱同名的工作組。建立使用者user1的時候指定其所屬工作組users,例:useradd –g users user11、使用命令 useradd 建立使用者例
Git 本地的撤銷修改和刪除操作
由於最近考試,其實是自己懶一直也沒有把部落格寫下去,今天就開始把以前的全部補回來 希望你在此能夠有此收穫,找到你想要找的問題 緊接上一篇部落格,想要從基礎學習的請從上篇看起 一:撤銷操作 比如我現在在readme.txt檔案裡面增加一行 內容為555
用java實現對MySql資料庫中資料的讀取、插入、修改和刪除
目標: 1、實現eclipse同資料庫的連線 2、在eclipse中用java實現對資料庫的控制 初學java和資料庫,本文是參考這篇文章的思路的學習筆記,程式碼實現了將4個控制函式(讀取、插入、修改和刪除)分別寫成4個靜態方法呼叫。 1. 關於java和MySQL的連
Android管理聯絡人(包含新增,查詢,修改和刪除;以及不同版本區別)
通過Android系統提供的介面,可以很方便的管理聯絡人資訊。一、新增1、新增聯絡人1.6上的程式碼:String peopleName = "name";ContentValues personValues = new ContentValues();// namepers
MyBatis批量新增,修改和刪除
1. 批量新增元素session.insert(String string,Object o) public void batchInsertStudent() { List<Student> ls = new ArrayList<Student>
Quartz 2.2 動態新增、修改和刪除定時任務
下面直接上程式碼: QuartzManager.java 動態新增、修改和刪除定時任務管理類 import org.quartz.CronScheduleBuilder; import org.quartz.CronTrigger; import org
C# 新增、修改和刪除PDF書籤
有時候我們在閱讀PDF文件時會遇到這樣一種情況:PDF文件頁數比較多,但是又沒有書籤,所以我們不能根據書籤快速瞭解文件所講解的內容,也不能點選書籤快速跳轉到相應的位置,而只能一頁一頁的翻閱,非常苦惱。相信開發人員在開發和PDF有關的應用程式時,也會有這樣的功能需求,因此在
Ajax實現新增、修改和刪除提示
//新增驗證 function addCheck(){ if(document.getElementById("txtValue").value=="0"){alert("請輸入!!");return false;} } var xmlHttp
web前端之Ajax遍歷json後對每一條資料進行相應的修改和刪除
web前端之ajax遍歷json後對每一條資料進行相應的修改和刪除 function serviceUser(){ $('.ergodicPersonList').remove(); $.ajax({ url: "/b
javascript操作table的動態新增行和刪除行
動態新增表格行和刪除行,ie9和chrome上執行通過: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
任務調度開源框架Quartz動態添加、修改和刪除定時任務
star play cit box sport nts str ignorecas tar 作者:Joyce-Luo Quartz 是個開源的作業調度框架,為在 Java 應用程序中進行作業調度提供了簡單卻強大的機制。Quartz框架包含了調度器監聽、
MySQL:創建、修改和刪除表
rop ont ... rst incr arc bigint 第一個 desc 1.創建數據庫:CREATE DATABASE 數據庫名; 刪除數據庫:DROP DATABASE 數據庫名; 查看數據庫編碼:SHOW CREATE DATABASE 數據庫名;
Linux中添加、修改和刪除用戶和用戶組
tty live 參數 項目 AR 格式 沒有 CA bin 寬為限 緊用功 功夫到 滯塞通 一、用戶: 在創建用戶時,需要為新建用戶指定一用戶組,如果不指定其用戶所屬的工作組,自動會生成一個與用戶名同名的工作組。創建用戶user1的時候指定其所屬工作組users,例: