
一、什么是Cookie
cookie是一種WEB服務器通過瀏覽器在訪問者的硬盤上存儲信息的手段。Cookie的目的就是為用戶帶來方便,為網站帶來增值。雖然有着許多誤傳,事實上Cookie並不會造成嚴重的安全威脅。Cookie永遠不會以任何方式執行,因此也不會帶來病毒或攻擊你的系統。另外,由於瀏覽器一般只允許存放300個Cookie,每個站點最多存放20個Cookie,每個Cookie的大小限制為4KB,因此Cookie不會塞滿你的硬盤。
例如,當我們第一次訪問網站輸入用戶名密碼時,可以選擇讓系統記住用戶名密碼,下次就不用重新輸入了,這就是典型的Cookie的應用。
二、Cookie帶來的好處:
cookies給網站和用戶帶來的好處非常多:
- 1. Cookie能使站點跟蹤特定訪問者的訪問次數、最后訪問時間等
- 2. Cookie能告訴在線廣告商廣告被點擊的次數,從而可以更精確的投放廣告
- 3. Cookie有效期限未到時,Cookie能使用戶在不鍵入密碼和用戶名的情況下進入曾經瀏覽過的一些站點
- 4. Cookie能幫助站點統計用戶個人資料以實現各種各樣的個性化服務在JSP中,我們也可以使用Cookie,來編寫一些功能強大的應用程序。
有些瀏覽器可以禁用Cookie,所以不能使用Cookie來完成核心的業務。
三、Cookie類的主要方法:
int getMaxAge() 返回Cookie過期之前的最大時間,以秒計算。 int setMaxAge() 設置Cookie過期時間,以秒計算。 String getName() 返回Cookie的名字 String getValue() 返回Cookie的值。 void setValue(String newValue) cookie創建后設置一個新的值。
四、代碼實現記住密碼登錄功能:
前端頁面代碼:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Excel數據上傳系統-登錄</title>
<link href="${pageContext.request.contextPath}/content/css/page/login.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div class="second_body">
<form data-bind="submit:loginClick">
<div class="logo"></div>
<div class="title-zh">Excel數據上傳系統</div>
<div class="title-en" style="">Excel Data Upload System</div>
<div class="message" data-bind="html:message"></div>
<table border="0" style="width:300px;">
<tr>
<td style="white-space:nowrap; padding-bottom: 5px;width:55px;">用戶名:</td>
<td colspan="2"><input type="text" id="userCode" class="login" data-bind="value:form.userCode" /></td>
</tr>
<tr>
<td class="lable" style="white-space:nowrap; letter-spacing: 0.5em; vertical-align: middle">密碼:</td>
<td colspan="2"><input type="password" id="password" class="login" data-bind="value:form.password" /></td>
</tr>
<tr>
<td></td>
<td colspan="2"><input type="checkbox" data-bind="checked:form.remember" /><span>系統記住我</span></td>
</tr>
<tr>
<td colspan="3" style="text-align:center">
<input type="submit" value="登錄" class="login_button" />
<input type="button" value="重置" class="reset_botton" data-bind="click:resetClick" />
</td>
</tr>
</table>
</form>
</div>
<script type="text/javascript" src="${pageContext.request.contextPath}/content/js/jquery/jquery-1.8.1.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/ligerUI/lib/jquery.cookie.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/content/js/core/utils.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/content/js/core/common.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/content/js/core/knockout-3.4.1.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/login.js"></script>
<script type="text/javascript">
$(function () {
ko.applyBindings(new viewModel());
});
</script>
</body>
</html>
后台業務處理代碼:
//登錄查詢
@RequestMapping(value={"/doLogin"},method ={RequestMethod.GET, RequestMethod.POST})
@ResponseBody
public AjaxJson doLogin(@RequestBody Map<String, String> json,HttpServletRequest request,HttpServletResponse response){
AjaxJson resutl = new AjaxJson();
String loginName = json.get("userCode");
String password = json.get("password");
//用戶名密碼檢查
if ( StringUtils.isBlank(loginName) || StringUtils.isBlank(password)){
resutl.setSuccess(false);
resutl.setMsg("用戶名或密碼不能為空!");
}else {
String passwordEncode = MD5Util.MD5Encode(password, "utf-8");
ExcelUser user = null;
user = loginService.findUserByLoginName(loginName);
if(user == null) {
resutl.setSuccess(false);
resutl.setMsg("該用戶名不存在!");
}else {
user = loginService.findUserByNameAndPwd(loginName, passwordEncode);
if(user == null) {
resutl.setSuccess(false);
resutl.setMsg("密碼輸入錯誤,請重新輸入");
}else {
if(user.getUser_status()!=null && user.getUser_status().equals("0")) {
resutl.setSuccess(false);
resutl.setMsg("該用戶名已被禁用,請聯系管理員!");
}else {
resutl.setObj(user);
Map<String, String> map = new HashMap<>();
map.put("userCode", loginName);
map.put("userName", user.getUser_name());
map.put("isOauthUser", "0");
JSONObject jsonObject=JSONObject.fromObject(map);
System.out.println(jsonObject.toString());
request.getSession().setAttribute("LOGIN_USER",jsonObject);
//創建兩個Cookie對象
Cookie nameCookie = new Cookie("userCode", loginName);
Cookie pwdCookie = new Cookie("password", password);
if("true".equals(String.valueOf(json.get("remember")))){
//設置Cookie的有效期為10天
nameCookie.setMaxAge(60 * 60 * 24 * 10);
pwdCookie.setMaxAge(60 * 60 * 24 * 10);
response.addCookie(nameCookie);
response.addCookie(pwdCookie);
}else {
//使其cookie失效
nameCookie.setMaxAge(0);
pwdCookie.setMaxAge(0);
response.addCookie(nameCookie);
response.addCookie(pwdCookie);
}
}
}
}
}
return resutl;
}
當登錄成功之后,再退出的話,就無需要再輸入用戶名和密碼了!
如果這篇文章對您有所幫助,請隨便打賞一下作為鼓勵,我會再接再厲的!!!

