A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

cookie自动登录的实现
     cookie自动登录是指把用户登录的信息按期限(自定)保存在客户端,当用户请求登录时判断客户端用没有cookie对象,有的话填充值,否则登录界面的输入框为空,不进行填充。
     登录界面之前在添加一个选择登录的jsp页面,通过选择“去登录”,servlet判断客户端此次有没有cookie对象。所以需要添加一个JSP页面和一个servlet。
index.jsp部分代码:
<body>
   <a href="/test/demo?status=auto">先去登录</a>   
</body>
login.jsp部分代码:
<body>
    <form action="/test/demo" 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("/test/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信息,并显示给浏览器

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马