• 【JavaWeb】Session(转)


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

    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来防止表单重复提交

    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>  
    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+"'> ");  
    15.             out.write("<input type='text' name='username'> ");  
    16.             out.write("<input type='submit' value='提交'> ");  
    17.         out.write("</form> ");  
    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. }  
      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. }  
  • 相关阅读:
    有return的情况下try_catch_finally的执行顺序
    java异常处理之try_catch_finally
    乔布简历
    策略模式--经典详细分析
    观察者模式(Observer Pattern)(二):HeadFirst中的气象站的实现
    luogu2444 [POI2000]病毒
    bzoj3172 luogu3966 [TJOI2013]单词
    luogu3808 luogu3796 AC自动机(简单版) AC自动机(加强版)
    vijos1459 车展
    poj2985 The k-th Largest Group
  • 原文地址:https://www.cnblogs.com/ymf123/p/4989526.html
Copyright © 2020-2023  润新知