对于经常访问的论坛,社区网站,如果每一次在自己电脑上浏览的时候就得输入用户名和密码,这样就非常麻烦。对于大多数除了关乎经济,个人隐私,信息安全等比较重要的网站外的大多数站点都提供了一个供用户选择是否记录用户名和密码的选择框,而且还附带着时间期限。
如果电脑只是自己私用,这样的功能当然是非常方便的;如果是共用的话那么最好在浏览器的Inertnet选项中将Cookies删除,或者选择退出删除浏览记录就可以了。
为了一探究竟,Cookie是怎样方便我的登录,于是做了一个模拟。
第一步:
编写一个登录页面:
作为登录页面为了更好的观察密码是否被保存使用了普通的文本框。设置的用户名为:“aiilive”密码为:“51cto”
- <%
- out.println("用一个时间戳来证明Cookie的存在:"+new Date().toString());
- %>
- <body>
- <form action="servlet/CookieServlet" method="post">
- <table border="1">
- <tr>
- <td>
- User:
- </td>
- <td>
- <input type="text" id="user" name="user" value="${sessionScope.user}"/>
- </td>
- </tr>
- <tr>
- <td>
- Password:
- </td>
- <td>
- <input type="text" id="password" name="password" value="${sessionScope.password}" />
- </td>
- </tr>
- <tr>
- <td colspan="2" align="center">
- <input type="submit" id="Submit" name="Submit" value="Submit" />
- </td>
- </tr>
- </table>
- </form>
- </body>
第二步:
编写初始化登录页面的serlvet.
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- response.setContentType("text/html");
- response.setCharacterEncoding("GB2312");
- HttpSession htSession=request.getSession();
- String user="";
- String password="";
- Cookie[] cos = request.getCookies();
- String tagString="tag";
- if (cos != null) {
- String name;
- for (int i = 0; i < cos.length; i++) {
- name=cos[i].getName();
- if(name.equals("http://aiilive.blog.51cto.com/username")){
- user=cos[i].getValue();
- tagString=tagString+"[user:"+user+",";
- }if(name.equals("http://aiilive.blog.51cto.com/passWord")){
- password=cos[i].getValue();
- tagString=tagString+"password:"+password+"]";
- }
- }
- }
- htSession.setAttribute("user", user);
- htSession.setAttribute("password", password);
- htSession.setAttribute("tagString", tagString);
- response.sendRedirect("../login.jsp");
- }
1.获取指定网站的Cookie信息,即登录信息
现将实验中生成的Cookie删除掉:
2.在登录页面上显示
如果不存在登录的Cookie信息则登录框为空,什么都不现实,为了模拟这里显示“空格”
填写登录信息:
提交信息将显示信息信息:
如果存在登陆的Cookie信息则登录框中显示用户名密码,用户直接登录
提交之后将显示:
第三步:
当页面提交的时候,应该通过增加或者修改Cookie来保存信息,如果用户的登录信息已经在Cookie中存在,则不再添加,如果修改或者不存在则添加Cookie信息。
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- response.setContentType("text/html");
- response.setCharacterEncoding("GB2312");
- HttpSession htSession=request.getSession();
- String user = request.getParameter("user");
- String password = request.getParameter("password");
- String cookieString="tag[user:"+user+",password:"+password+"]";
- if(!htSession.getAttribute("tagString").toString().trim().equals(cookieString)){
- Cookie coUserName = new Cookie(
- "http://aiilive.blog.51cto.com/username", user);
- coUserName.setMaxAge(30 * 24 * 60 * 60);
- Cookie coUserPassword = new Cookie(
- "http://aiilive.blog.51cto.com/passWord", password);
- coUserPassword.setMaxAge(30 * 24 * 60 * 60);
- response.addCookie(coUserName);
- response.addCookie(coUserPassword);
- }
- if(user.equals("aiilive")&&password.equals("51cto")){
- response.sendRedirect("../welcome.jsp");
- }else{
- response.sendRedirect("../login.jsp");
- }
- }
保存登录信息到本地当然是非常方便的做法,但是这必须保证电脑属于自己的专属,不然往往会引起不必要的麻烦。如果有关于银行账户信息,支付宝,电子口令等等这些信息自然坚决不能存在本地计算机,当然更不能存放在网络上。在互联网迅猛发展的同时,我们的信息安全也面临这巨大的风险,每一次互联网上的活动,都是个人信息安全的一次降级。
使用Cookie的地方还是非常多的,不过对于不同的项目,不同的环境,不同的安全性要求,不同的应用必须慎重考虑,系统的安全性在现如今的网络时代已经成为不可轻视的部分。
本文转自 secondriver 51CTO博客,原文链接:http://blog.51cto.com/aiilive/861941,如需转载请自行联系原作者