一、同一個用戶不同頁面共享數據
(1)sendRedirect()跳轉
(2)隱藏表單提交(form)。
(3)session技術。
(4)cookie技術。
下面介紹這四種方式共享數據各自特點:
1,sendRedirect()跳轉:
通過該方法可以將一個頁面的信息傳入到另外一個頁面
resp.sendRedirect("Wel?username=" + name + "&pwd=" + pwd);
優點:傳送信息的速度比較快。
缺點:它只能傳送字符串,不能傳遞對象。
注意點:
- Wel代表你要傳遞那個servlet的url。
- servlet的url名和變量之間有個?,變量名=之間不要有空格。
- 如果傳遞2個以上的值之間用&分割;比如:resp.sendRedirect(“Wel?username=” + name + “&pwd=” + pwd);
- 如果傳遞的是中文,需要處理一下防止亂碼,resp.setContentType(“text/html,charset=gbk”);
2,隱藏表單提交(form)
這是最常見的一種方式,但有時特別有用。
例如:value變量可以隱士傳遞表單參數。
String value="123";
<form action ='login' method='post'>
<intput type='hidden' name ='a' value ="+value+"/>
</form>
3,session技術
(1) 什麼是session?
(2) session有哪些用處?
- 網上商城購物車。
- 保存用戶登錄的信息。
- 將用戶信息保存到session中,供其他頁面使用。
- 防止用戶非法訪問某個頁面。
。。。。。。等等。
舉例:防止非法訪問某個頁面
如果用戶信息驗證合法,則向服務器寫入session,正常頁面跳轉邏輯:
HttpSession session = req.getSession(true);
// 向session中添加某個屬性
session.setAttribute("pass", "ok");
// 設置超時時間。
session.setMaxInactiveInterval(20);
// 跳轉歡迎界面。
resp.sendRedirect("Wel?username=" + name + "&pwd=" + pwd);
非法訪問處理,如果非法訪問pass=null 則跳轉到登錄頁面。
HttpSession session = req.getSession();
try {
String pass = (String) session.getAttribute("pass");
if (pass == null) {
resp.sendRedirect("Login");
}
} catch (Exception e) {
e.printStackTrace();
}
(3)對session的理解
(4)session的使用
- 獲得session
HttpSession session = req.getSession(true); - 向session中添加某個屬性
session.setAttribute(String name, Object obj); - 從session中得到某個屬性
session.getAttribute(String name); - 從session中移除某個屬性
session.removeAttribute(String name); - 註銷session中的內容(比較安全的一種方式)
session.setMaxInactiveInterval(0);
(5) session的注意事項:
session默認保存的時間30min,當然也可以修改①web.xml修改。②代碼修改。
// 設置超時時間。
session.setMaxInactiveInterval(20);30min指的是用戶閒置時間,而不是累計時間。
- 當某個瀏覽器訪問網站時,服務器會給瀏覽器分配一個唯一的sessionId,並以此區分不通瀏覽器。
- 因爲session的各個屬性要佔用服務器內存,因此逼不得已下才使用。
4、cookie技術
(1)什麼是cookie
服務器在客戶端保存的用戶信息。比如登錄名、密碼等等就是cookie,服務器在需要的時候可以從客戶端進行讀取,當再次訪問服務器的時候可以在一定時間內不用重複登錄。
(2)cookie的使用
創建cookie
Cookie cookie=new Cookie(String name, String value);
將cookie添加到客戶端。
response.addCookie(cookie);讀取cookie
request.getCookie();刪除cookie
tempCookie對象調用setMaxAge(0)方法,設置cookie存在時長0秒。
注意:必須設置cookie有效時長,才能保存在客戶端,即調用setMaxAge(int second) 方法,這裏的second是累計時間。
舉例說明cookie的使用
保存cookie到客戶端
// 在服務器創建一個cookie
Cookie cookie = new Cookie("color", "red");
// 設置cookie存在時間30s(必須設置有效時長,才能保存在客戶端)
cookie.setMaxAge(30);
// 保存cookie到客戶端
resp.addCookie(cookie);
System.out.println("保存到color cookie到客戶端");服務端讀取cookie
// 獲取cookie
Cookie[] cookies = req.getCookies();
if (null != cookies) {
for (int i = 0; i < cookies.length; i++) {
Cookie tempCookie = cookies[i];
if (tempCookie.getName().equals("color")) {
String value = tempCookie.getValue();
System.out.println("保存color cookie value=" + value);
// 刪除color cookie
tempCookie.setMaxAge(0);
break;
}
}
} else {
System.out.println("客戶端不存在color cookie");
}
二、session和cookie的比較
- 存在位置
session保存在服務端,cookie保存在客戶端。 - 安全性
cookie的安全性比session弱。 - 網絡傳輸量
cookie通過網絡在客戶端與服務器端傳輸,session保存在服務器端,不需要傳輸。 - 生命週期
session的時間是閒置時間,如果客戶端再次訪問服務器session會重新計時,服務器銷燬時session失效;cookie是累計時間,服務器關閉時,cookie仍然保存在客戶端,除非cookie累計超時。
最後我做了一個關於cookie的保存在客戶端的demo:
http://download.csdn.net/detail/tianyejun6/9726756