『壹』 java中的Cookie的意思、用途!
cookie首先並不是java的概念,是web編程里一種客戶端存儲數據的方式(通常是加密過的)。
有些數據,不是特別重要,但用戶又經常要用到的,比如:網站用戶的登錄信息、歷史查看記錄等等,這些數據保存在伺服器上會讓伺服器承擔很大的壓力,因此變產生了cookie這樣一種客戶端數據存儲的方式。意思就是說把你個人的一些數據保存在本地,這樣伺服器減少了壓力,並且下次你訪問網站的時候,伺服器會主動去你的機器上讀取這些數據並展現出來。
比較常見的例子,有些網站登錄的時候會有一個「記住登錄狀態」的選擇,選了以後用戶以後再來這個網站會發現不用再登錄了,比如網路知道、貓撲等等;再比如最近優酷、騰訊視頻上的的歷史觀看記錄,不用登錄,就可以記錄你的機器上次看了哪些視頻,看到多少分多少秒了,下次來直接點就能接著看,特別實用~~~~ PS.我最近一直在用,哈哈
cookie雖然有諸多好處,但使用的過程中還是需要注意風險,因為客戶端的不確定性,對安全和隱私要求較高的數據建議還是不要放在cookie里存儲,比如網路游戲賬號密碼信息、電子銀行賬戶信息等等。
最後再說一個實例,當你清除瀏覽器緩存的時候,一般會有選擇是否清除cookie,或者360安全衛士幫助你清除上網痕跡的時候,都會把本地cookie清除掉,這時候你會發現,你很長時間都不用登錄的網站,比如網路知道、貓撲(原諒我經常上的網站就這倆,沒別的例子可舉- -!......),現在都需要重新登錄了,原因就是cookie被清除掉了
一字一句全是手打,望樓主採納~~
『貳』 關於Java里邊session和cookie的問題
伺服器壓力增大,有很多原因,不一定就是Session的事。
所有圖書列表信息,不知這個所有是指庫中存放的所有圖書,還是單指某一個人的所有圖書。如果是庫中的所有圖書,就應放入Application中或者一個靜態的全局變數中,而不是放在session中。
只考慮session的話,可以看看下面的建議:
session中,最佳處理是只放登錄後的人員基本信息,相關信息,再通過基本信息查詢,如果覺得從物理庫中查詢慢,可以採用內存資料庫,緩存不經常改變的信息。
『叄』 java網站開發怎麼實現用戶賬號信息本地保存
看看這個吧!主要是對cookie的操作
package cn.itcast.util;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import cn.itcast.bean.User;
import cn.itcast..UserDAO;
import cn.itcast.factory.DaoImplFactory;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
/*
* 2007.09.21 by lyhapple
* */
public class CookieUtil {
//保存cookie時的cookieName
private final static String cookieDomainName = 「cn.itcast」;
//加密cookie時的網站自定碼
private final static String webKey = 「itcast」;
//設置cookie有效期是兩個星期,根據需要自定義
private final static long cookieMaxAge = 60 * 60 * 24 * 7 * 2;
//保存Cookie到客戶端--------------------------------------------------------------------------------------------------------
//在CheckLogonServlet.java中被調用
//傳遞進來的user對象中封裝了在登陸時填寫的用戶名與密碼
public static void saveCookie(User user, HttpServletResponse response) {
//cookie的有效期
long validTime = System.currentTimeMillis() + (cookieMaxAge * 1000);
//MD5加密用戶詳細信息
String cookieValueWithMd5 =getMD5(user.getUserName() + ":" + user.getPassword()
+ ":" + validTime + ":" + webKey);
//將要被保存的完整的Cookie值
String cookieValue = user.getUserName() + ":" + validTime + ":" + cookieValueWithMd5;
//再一次對Cookie的值進行BASE64編碼
String cookieValueBase64 = new String(Base64.encode(cookieValue.getBytes()));
//開始保存Cookie
Cookie cookie = new Cookie(cookieDomainName, cookieValueBase64);
//存兩年(這個值應該大於或等於validTime)
cookie.setMaxAge(60 * 60 * 24 * 365 * 2);
//cookie有效路徑是網站根目錄
cookie.setPath("/");
//向客戶端寫入
response.addCookie(cookie);
}
//讀取Cookie,自動完成登陸操作--------------------------------------------------------------------------------------------
//在Filter程序中調用該方法,見AutoLogonFilter.java
public static void readCookieAndLogon(HttpServletRequest request, HttpServletResponse response,
FilterChain chain) throws IOException, ServletException,UnsupportedEncodingException{
//根據cookieName取cookieValue
Cookie cookies[] = request.getCookies();
String cookieValue = null;
if(cookies!=null){
for(int i=0;i
if (cookieDomainName.equals(cookies[i].getName())) {
cookieValue = cookies[i].getValue();
break;
}
}
}
//如果cookieValue為空,返回,
if(cookieValue==null){
return;
}
//如果cookieValue不為空,才執行下面的代碼
//先得到的CookieValue進行Base64解碼
String cookieValueAfterDecode = new String (Base64.decode(cookieValue),"utf-8");
//對解碼後的值進行分拆,得到一個數組,如果數組長度不為3,就是非法登陸
String cookieValues[] = cookieValueAfterDecode.split(":");
if(cookieValues.length!=3){
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("你正在用非正常方式進入本站...");
out.close();
return;
}
//判斷是否在有效期內,過期就刪除Cookie
long validTimeInCookie = new Long(cookieValues[1]);
if(validTimeInCookie < System.currentTimeMillis()){
//刪除Cookie
clearCookie(response);
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("");你的Cookie已經失效,請重新登陸
out.close();
return;
}
//取出cookie中的用戶名,並到資料庫中檢查這個用戶名,
String username = cookieValues[0];
//根據用戶名到資料庫中檢查用戶是否存在
UserDAO ud = DaoImplFactory.getInstance();
User user = ud.selectUserByUsername(username);
//如果user返回不為空,就取出密碼,使用用戶名+密碼+有效時間+ webSiteKey進行MD5加密
if(user!=null){
String md5ValueInCookie = cookieValues[2];
String md5ValueFromUser =getMD5(user.getUserName() + ":" + user.getPassword()
+ ":" + validTimeInCookie + ":" + webKey);
//將結果與Cookie中的MD5碼相比較,如果相同,寫入Session,自動登陸成功,並繼續用戶請求
if(md5ValueFromUser.equals(md5ValueInCookie)){
HttpSession session = request.getSession(true);
session.setAttribute("user", user);
chain.doFilter(request, response);
}
}else{
//返回為空執行
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("cookie驗證錯誤!");
out.close();
return;
}
}
//用戶注銷時,清除Cookie,在需要時可隨時調用------------------------------------------------------------
public static void clearCookie( HttpServletResponse response){
Cookie cookie = new Cookie(cookieDomainName, null);
cookie.setMaxAge(0);
cookie.setPath("/");
response.addCookie(cookie);
}
//獲取Cookie組合字元串的MD5碼的字元串----------------------------------------------------------------------------
public static String getMD5(String value) {
String result = null;
try{
byte[] valueByte = value.getBytes();
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(valueByte);
result = toHex(md.digest());
} catch (NoSuchAlgorithmException e2){
e1.printStackTrace();
}
return result;
}
//將傳遞進來的位元組數組轉換成十六進制的字元串形式並返回
private static String toHex(byte[] buffer){
StringBuffer sb = new StringBuffer(buffer.length * 2);
for (int i = 0; i < buffer.length; i++){
sb.append(Character.forDigit((buffer[i] & 0xf0) >> 4, 16));
sb.append(Character.forDigit(buffer[i] & 0x0f, 16));
}
return sb.toString();
}
}