【JavaWeb】Session(转)

Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。

 

[java]  view plain copy print ?
 
  1. /******************************************************************************* 
  2.  * session的几个相关问题: 
  3.  * 1.服务器实现session共享是基于cookie技术,服务器在创建session时,会自动把sessionID号以cookie的形式写回给浏览器,只是cookie有效期没有设置。 
  4.  * 2.如果要实现多窗口购买,这时程序就要手工以cookie的形式发送sessionID号给浏览器,并设置cookie有效期,以及有效路径(/test) 
  5.  * 3.如果用户禁用 cookie后,服务器程序还能实现session共享,那这时,就要把网站所有涉及会话的url地址全部要重写 
  6.  *  
  7.  * 
  8.  ******************************************************************************/  
  9. public class SessionDemo1 extends HttpServlet {  
  10.   
  11.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  12.             throws ServletException, IOException {  
  13.   
  14.         HttpSession session = request.getSession();  
  15.           
  16.         String data = "xxxxx";  
  17.           
  18.         session.setAttribute("data", data);  
  19.           
  20.     }  
  21.   
  22.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  23.             throws ServletException, IOException {  
  24.   
  25.         doGet(request, response);  
  26.     }  
  27.   
  28. }  


用session来防止表单重复提交

 

 

[html]  view plain copy print ?
 
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  2. <html>  
  3.   <head>  
  4.     <title>form2.html</title>  
  5.       
  6.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  7.     <meta http-equiv="description" content="this is my page">  
  8.     <meta http-equiv="content-type" content="text/html; charset=UTF-8">  
  9.       
  10.     <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->  
  11.   
  12.   </head>  
  13.   <body>  
  14.    <form action="/test/servlet/FormServlet"  method="post">  
  15.         用户名:<input type="text" name="username"><input type="submit" value="登陆">  
  16.     </form>  
  17.   </body>  
  18. </html>  

 

[java]  view plain copy print ?
 
  1. //负责输出一个表单给用户  
  2. public class FormServlet extends HttpServlet {  
  3.   
  4.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  5.             throws ServletException, IOException {  
  6.   
  7.         response.setCharacterEncoding("UTF-8");  
  8.         response.setContentType("text/html;charset=UTF-8");  
  9.         PrintWriter out = response.getWriter();  
  10.           
  11.         String token = TokenProccessor.getInstance().makeToken();  
  12.         request.getSession().setAttribute("token", token);  
  13.         out.println("<form action='/test/servlet/DoSubmitServlet' method='post'>");  
  14.             out.write("<input type='hidden' name='token' value='"+token+"'>\r\n");  
  15.             out.write("<input type='text' name='username'>\r\n");  
  16.             out.write("<input type='submit' value='提交'>\r\n");  
  17.         out.write("</form>\r\n");  
  18.           
  19.         System.out.println("token"+token);  
  20.           
  21.     }  
  22.   
  23.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  24.             throws ServletException, IOException {  
  25.         doGet(request, response);  
  26.     }  
  27.   
  28. }  
  29.   
  30. //随机数生成器   保证随机数的唯一性,所有随机数都由这一个对象产生。这样产生相同的随机数的几率较小。  
  31. class TokenProccessor{  
  32.       
  33.     //1.把构造函数私有  
  34.     //2.自己创建一个类的对象  
  35.     //3.提供方法获取类的对象  
  36.   
  37.     private TokenProccessor(){}  
  38.     private static TokenProccessor instance = new TokenProccessor();  
  39.     public static TokenProccessor getInstance(){  
  40.         return instance;  
  41.     }  
  42.     public String makeToken(){  
  43.         // 28378232323 232323   9239283983292 11  
  44.         String token = System.currentTimeMillis() + new Random().nextInt(1000000) + "";  
  45.           
  46.         //得到数据指纹  //md5  消息摘要  
  47.         try {  
  48.             MessageDigest digest = MessageDigest.getInstance("md5");  
  49.             byte result[] = digest.digest(token.getBytes());  //128    16  固定长度。  
  50.               
  51.             BASE64Encoder encoder = new BASE64Encoder();  //Base64将三字节变成四字节(由原来的8位截前6位然后在前面补00,所以取值范围0-63)  
  52.             token = encoder.encode(result);  
  53.               
  54.         } catch (NoSuchAlgorithmException e) {  
  55.             throw new RuntimeException(e);  
  56.         }  
  57.         return token;  
  58.     }  
  59.       
  60. }  

 

[java]  view plain copy print ?
 
    1. //处理表单提交请求,要防表单重复提交  
    2. public class DoSubmitServlet extends HttpServlet {  
    3.   
    4.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
    5.             throws ServletException, IOException {  
    6.   
    7.         boolean b = isToken(request);   //b  
    8.         if(b){  
    9.             System.out.println("重复提交");  
    10.             return;  
    11.         }  
    12.           
    13.         System.out.println("处理表单提交请求!!");  
    14.         request.getSession().removeAttribute("token");  
    15.           
    16.     }  
    17.   
    18.     private boolean isToken(HttpServletRequest request) {  
    19.           
    20.         String c_token = request.getParameter("token");  
    21.         System.out.println("c_token"+c_token);  
    22.         if(c_token==null){  
    23.             return true;  
    24.         }  
    25.         String s_token = (String) request.getSession().getAttribute("token");  
    26.         if(s_token==null){  
    27.             return true;  
    28.         }  
    29.           
    30.         if(!c_token.equals(s_token)){  
    31.             return true;  
    32.         }  
    33.         return false;  
    34.     }  
    35.   
    36.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
    37.             throws ServletException, IOException {  
    38.   
    39.         doGet(request, response);  
    40.     }  
    41.   
    42. }  

转载于:https://www.cnblogs.com/ymf123/p/4989526.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值