loginCookie.jsp

转载 2016年08月29日 11:24:21

<%@ page language="java" pageEncoding="UTF-8" isErrorPage="false" %>
<jsp:directive.page import="java.security.MessageDigest"/>
<%!
 // 密钥
 private static final String KEY = ":cookie@helloweenvsfei.com";

 // 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"));
  
  // 把帐号连同密钥使用MD5后加密后保存
  String ssid = calcMD5(account + KEY);
    
  // 把帐号保存到Cookie中 并控制有效期
  Cookie accountCookie = new Cookie("account", account);
  accountCookie.setMaxAge(timeout);
  
  // 把加密结果保存到Cookie中 并控制有效期
  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中的帐号
  Cookie accountCookie = new Cookie("account", "");
  accountCookie.setMaxAge(0);
  
  // 删除Cookie中的加密结果
  Cookie ssidCookie = new Cookie("ssid", "");
  ssidCookie.setMaxAge(0);

  response.addCookie(accountCookie);
  response.addCookie(ssidCookie);

  // 重新请求本页面
  response.sendRedirect(request.getRequestURI() + "?" + System.currentTimeMillis());
  return;
 }
 
 boolean loggin = false;
 
 String account = null;
 String ssid = null;
 
 // 获取Cookie中的account与ssid
 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){
  // 如果加密规则正确, 则视为已经登录
  loggin = ssid.equals(calcMD5(account + KEY));
 }
 
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title><%= loggin ? "欢迎您回来" : "请先登录" %></title>
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body>
<div align="center" style="margin:10px; ">
 <fieldset>
  <legend>当前有效的 Cookie</legend>
  <script>document.write(document.cookie);</script>
 </fieldset>
 <fieldset>
  <legend><%= loggin ? "欢迎您回来" : "请先登录" %></legend>
  <% if(loggin){ %>
   欢迎您, ${ cookie.account.value }. &nbsp;&nbsp;
   <a href="${ pageContext.request.requestURI }?action=logout">注销</a>
  <% } else { %>
  <form action="${ pageContext.request.requestURI }?action=login" method="post">
   <table>
    <tr>
     <td>
      帐号:
     </td>
     <td>
      <input type="text" name="account" style="width:200px; ">
     </td>
    </tr>
    <tr>
     <td>
      密码:
     </td>
     <td>
      <input type="password" name="password" style="width:200px; ">
     </td>
    </tr>
    <tr>
     <td>
      有效期:
     </td>
     <td>
      <input type="radio" name="timeout" value="-1" checked> 关闭浏览器即失效 <br/>
      <input type="radio" name="timeout" value="<%= 30 * 24 * 60 * 60 %>"> 30天内有效 <br/>
      <input type="radio" name="timeout" value="<%= Integer.MAX_VALUE %>"> 永久有效 <br/>
     </td>
    </tr>
    <tr>
     <td>
     </td>
     <td>
      <input type="submit" value=" 登  录 " class="button">
     </td>
    </tr>
   </table>
  </form>
  <% } %>
 </fieldset>
</div>

</body>
</html>


相关文章推荐

servlet和jsp学习(二)

1,http是什么(超文本传输协议)? 2.两种请求方式 3.servlet中文乱码问题 4.常见的错误及处理方式 5.如何获得请求参数值? 6,servlet如何使用jdbc来访问数据库 7,mys...

jsp——动作标签

JSP动作标签   1 .JSP动作标签概述     JSP动作标签是JavaWeb内置的动作标签,它们是已经定义好的动作标签,我们可以拿来直接使用。JavaWeb一共提供了20个JSP动作标签...

JSP九大内置对象

总的来说关于JSP界面有九大内置对象,7大动作,三大指令,现在博主就将这些粘贴出来,此文是很久前整理的学习笔记,如有雷同请谅解!jsp九大内置对象: 1>out 向客户端输出数据,字节流.如out....

跟小博老师一起学JSP ——MVC 下篇

昨天小傅老师给小伙伴们介绍了MVC, 简单回顾下基本概念。Model层用来实现业务逻辑,View层用来显示用户界面,Controller层主要负责View层和Model层之间的控制关系。具体实现时,我...

深入分析JavaWeb 16 -- jsp 四大域(属性)范围

jsp里面有四大域,作用域从小到大分别是page域,request域,session域,application(servletContext)域,域也可以称为属性范围。所谓的属性范围就是一个属性设置之...

JspSourceDependent 源代码JSP java源码

JspSourceDependent(Jsp基本类)属于jasper包   packageorg.apache.jasper.runtime;   importjava.util.Map; ...

JSP页面介绍

 下面是一个刚刚新建的JSP页面 我们都来看看JSP页面都有些什么东西先看懂才能写对...

JSP内置对象值out对象及其它的一些常见方法

out内置对象 <% out.println("静夜思");//可以在println();里面加入标签 out.println("床前明月光"); out.pri...

JSP协议之HTTP协议

HTTP协议                      请求头(客户端与服务器交互)  ...

JSP 标签 tag

ca
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)