java cookie 永久_JavaWeb学习笔记4——Cookie永久登录案例-Go语言中文社区

当用户在自家上网时,应该不难发现,在你第一次登录后,下次访问就不需要再次登录,这是因为在第一次登录时网站就记住了你的登录信息。实现这个功能其实很简单,只需要把登录信息,比如账号、密码等保存在Cookie中,并控制Cookie的有效期,下一次访问时再验证Cookie中的登录信息就可以了。

但是直接把密码保存在Cookie的做法是比较危险的,所以我们今天的案例采用了另一种方法:把账号按照一定的规则进行加密后保存到Cookie中,下次访问时只需要判断帐号的加密规则是否正确。本例把账号保存到名为account的Cookie中,把账号连同密钥用MD5算法加密后保存到名为ssid的Cookie中,验证时,验证Cookie中的账号与密钥加密后是否与Cookie中的ssid相等。

代码如下:

loginCookie.jsp

//md5加密算法

public final static String calcMD5(String ss) {

String s = ss == null ? "" : ss;

char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

try {

byte[] strTemp = s.getBytes();

MessageDigest mdTemp = MessageDigest.getInstance("MD5");

mdTemp.update(strTemp);

byte[] md = mdTemp.digest();

int j = md.length;

char str[] = new char[j * 2];

int k = 0;

for (int i = 0; i < j; i++) {

byte byte0 = md[i];

str[k++] = hexDigits[byte0 >>> 4 & 0xf];

str[k++] = hexDigits[byte0 & 0xf];

}

return new String(str);

} catch (Exception e) {

return null;

}

}%>

request.setCharacterEncoding("UTF-8");

response.setCharacterEncoding("UTF-8");

String action = request.getParameter("action");

if ("login".equals(action)) {

//获取各种参数

String account = request.getParameter("account");

String password = request.getParameter("password");

int timeout = new Integer(request.getParameter("timeout"));

String ssid = calcMD5(account + KEY);

//将账号存入accountCookie

Cookie accountCookie = new Cookie("account", account);

accountCookie.setMaxAge(timeout);

//将账号、密钥加密后存入accountCookie

Cookie ssidCookie = new Cookie("ssid", ssid);

ssidCookie.setMaxAge(timeout);

response.addCookie(accountCookie);

response.addCookie(ssidCookie);

//重新请求本页面

response.sendRedirect(request.getRequestURI() + "?" + System.currentTimeMillis());

return;

}

else if ("logout".equals(action)) {

Cookie accountCookie = new Cookie("account", "");

accountCookie.setMaxAge(0);//设置有效期为0,即删除

Cookie ssidCookie = new Cookie("ssid", "");

ssidCookie.setMaxAge(0);//设置有效期为0,即删除

response.addCookie(accountCookie);

response.addCookie(ssidCookie);

//重新请求本页面

response.sendRedirect(request.getRequestURI() + "?" + System.currentTimeMillis());

return;

}

boolean login = false;

String account = null;

String ssid = null;

if (request.getCookies() != null) {

for (Cookie cookie : request.getCookies()) {

if (cookie.getName().equals("account"))

account = cookie.getValue();

if (cookie.getName().equals("ssid"))

ssid = cookie.getValue();

}

}

if (account != null && ssid != null) {

login = ssid.equals(calcMD5(account + KEY));//如果加密规则正确,则login置为true,已登录

}

%>

if (login) {

%>

欢迎您,${cookie.account.value}.  

注销

} else {

%>

账号:
密码:
有效期: 关闭浏览器即失效

type="radio" name="timeout" value="">30天内有效

永久有效

登陆时可对登录信息的有效期进行选择,这是通过设置Cookie的age属性来实现的,运行结果如图:

e05a78d88345ded5bf19e8103c1db005.png

567d539eaacf8e89530e0c4504c97a32.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值