zoukankan      html  css  js  c++  java
  • cookie自动登录的实现

         cookie自动登录是指把用户登录的信息按期限(自定)保存在客户端,当用户请求登录时判断客户端用没有cookie对象,有的话填充值,否则登录界面的输入框为空,不进行填充。
         登录界面之前在添加一个选择登录的jsp页面,通过选择“去登录”,servlet判断客户端此次有没有cookie对象。所以需要添加一个JSP页面和一个servlet。
    index.jsp部分代码:
    <body>
       <a href="/t31/AdminSer?status=auto">先去登录</a>   
     </body>
    login.jsp部分代码:
    <body>
        <form action="/t31/AdminSer" method="post">
            管理员姓名:<input type="text" name="aname" value="${requestScope.aname}" /><br/>
            管理员密码:<input type="text" name="apass" value="${requestScope.apass}" /><br/>
            ${requestScope.error}<br/>
            <select name="auto">
                <option value="0">不自动填充</option>
                <option value="7">一周</option>
                <option value="30">一月</option>
            </select><br/>
            <input type="submit" value="提交" />
            <input type="hidden" name="status" value="login" />
        </form>
    </body>
    servlet部分代码:
    if(status.equals("login")){
                String aname = request.getParameter("aname");
                String apass = request.getParameter("apass");
                if (aname.equals(apass)) {
                    /*将用户登录名放到session中*/
                    HttpSession session = request.getSession();
                    session.setAttribute("aname", aname);
                    /*判断用户是否需要保存自己的登录信息 */
                    Cookie anameCookie=new Cookie("aname",aname);
                    Cookie apassCookie=new Cookie("apass",apass);
                    /*计算保存时间*/
                    anameCookie.setMaxAge(60*60*24*Integer.parseInt(request.getParameter("auto")));
                    apassCookie.setMaxAge(anameCookie.getMaxAge());
                    /*response代表响应 */
                    response.addCookie(anameCookie);
                    response.addCookie(apassCookie);
                    /*页面重定向*/
                    response.sendRedirect("/t31/queryStudent.jsp");
                } else{
                    request.setAttribute("error", "登录失败");
                    request.getRequestDispatcher("/login.jsp").forward(request, response);
                }
            }else if(status.equals("auto")){
                Cookie[] cookies=request.getCookies();
                for(Cookie cookie:cookies){
                    if(cookie.getName().equals("aname")){
                        request.setAttribute("aname", cookie.getValue());
                    }
                    if(cookie.getName().equals("apass")){
                        request.setAttribute("apass", cookie.getValue());
                    }
                }
                request.getRequestDispatcher("/login.jsp").forward(request, response);
            }
        }
     
     
     
     
    创建cookie
    Cookie cookie = new Cookie(String name,String value);
    response.addCookie(cookie);
     
    查询cookie
    //如果没有cookie,则返回null。
    Cookie[] cookies = request.getCookies();
    String name = cookie.getName();
    String value = cookie.getValue();
     
     
    cookie的限制
    cookie可以禁止
    cookie的大小有限制(4k左右)
    cookie的数量也有限制(浏览器大约能保存300个)
    cookie的值叧能是字符串,要考虑编码问题。
    cookie不安全
     
     
    保存和查询Cookie流程
    a. 浏览器向服务器发送addCookie请求 
    服务器中的AddCookieServlet创建了两个Cookie:cookie和cookie2
     
    b. 服务器端执行语句response.addCookie(cookie);生成消息头“set-cookie”, 
    并将两个Cookie以键值对的方式(“name=aaa”、“passwd=123”)存放在消息头中发 送给浏览器
     
    c. 浏览器将Cookie信息保存到本地内存中
     
    d. 浏览器继续向服务器发送请求(带着消息头cookie) 
    服务器端的FindCookieServlet找到Cookie信息,并显示给浏览器
     
     
  • 相关阅读:
    [心得]如何快速利用SqlMap做安全檢測
    [心得]群裡提問的流水序號產生方式
    STL中使用reverse_iterator时,如何正确使用erase函数
    西山居面试之旅
    LAMP兄弟连 视频教程集
    [译]理解Windows消息循环
    C++设计模式 -- 解析和实现
    winsock 收发广播包
    SqlServer sysobjects_table
    查询反模式
  • 原文地址:https://www.cnblogs.com/panweiwei/p/6152852.html
Copyright © 2011-2022 走看看