好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

利用cookies自动登录代码.docx

9页
  • 卖家[上传人]:鲁**
  • 文档编号:437023310
  • 上传时间:2023-12-05
  • 文档格式:DOCX
  • 文档大小:27.97KB
  • / 9 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 利用cookies自动登录代码使用Session和Cookie实现网站自动登录登陆的时候一旦选择了[自动登录]的选项,则需要在登陆成功后,附加下面的代码应为一般网站都提供保存用户名的功能,所以我把这个写到了外面只有密码是单独处理的其中的host就是你的域名第一步,编写login.jsp文件,内容如下:本部分设定了隐藏,您已回复过了,以下是隐藏的内容Stringhost=request.getServerName();Cookiecookie=newCookie("SESSION_LOGIN_USERNAME",username);//保存用户名到Cookiecookie.setPath("/");cookie.setDomain(host);cookie.setMaxAge(99999999);response.addCookie(cookie);if(ParamUtils.getBooleanParameter(request,"savePassword")){//保存密码到Cookie,注意需要加密一下cookie=newCookie("SESSION_LOGIN_PASSWORD",MD5.encode(u.getPassword()));cookie.setPath("/");cookie.setDomain(host);cookie.setMaxAge(99999999);response.addCookie(cookie);}这样,Cookie就生成了第二步,在用户访问网站的时候,如果检测到没有登陆,则进行下面的判断,例如编写一个index.jsp,内容如下:StringusernameCookie=null;StringpasswordCookie=null;Cookie[]cookies=request.getCookies();if(cookies!=null){for(Cookiecookie:cookies){if("SESSION_LOGIN_USERNAME".equals(cookie.getName())){usernameCookie=cookie.getValue();//得到cookie的用户名}if("SESSION_LOGIN_PASSWORD".equals(cookie.getName())){passwordCookie=cookie.getValue();//得到cookie的密码}}if(usernameCookie!=null&&passwordCookie!=null){//如果存在if(Login.checkLogin(usernameCookie,passwordCookie)){//登陆成功的处理}else{//登陆不成功的处理}}}这部份代码可以写到action或servlet中。

      最后一个注意事项,应该在退出登录里面清除cookie,以免他无法换账号登陆了!logout.jsp内容如下:cookie=newCookie("SESSION_LOGIN_PASSWORD","");cookie.setPath("/");cookie.setMaxAge(99999999);cookie.setDomain(host);response.addCookie(cookie);\Y*■、'八■,I[/—r-.r*注意事项:一旦自动登录失败,则取消其自动登录的可能性,防止暴力破解!所以通常会在对应的实体中定义一个属性来标示是否自动登录,也就是说:这个标志只有下次正常输入验证码的登陆才会被清除!!jsp使用cookie实现自动登录一、什么是用户自动登录?对于我们的网站向已注册用户提供某些专门的服务,比如网上购物、下载、收费浏览等等,就会要求用户在使用这些服务之前进入登录页面,输入用户名和密码,并进行验证如果用户经常访问我们的网站,假如每天都访问一次,或者好几次,那么用户每次都重复这些登录操作就会感到相当厌烦通过一些简单的技术手段,我们可以让网站“记住”那些在曾经登录过的用户。

      当该用户下次再来访问的时候,网站可以识别该用户,并为其自动完成登录过程二、基本思路作为网站的编写者,我们无从知道坐在电脑前的那个人是谁我们能够知道的是,访问网站的是哪一台电脑——这一点可以通过Cookie实现因此,对用户的识别实际上就是对客户端电脑的识别简单的说,当用户第一次登录网站的时候,网站向客户端发送一个包含有用户名的Cookie当用户在之后的某个时候再次访问,浏览器就会向网站服务器回送这个Cookie,于是,我们可以从这个Cookie中读取到用户名,然后调用登录的方法,从而实现自动为用户登录三、防止欺骗Cookie只是一个普通的文本文件,那里面包含的字符串可以直接用记事本打开并进行编辑因此任何人在任何电脑上都可以伪造一个包含有他人用户名的Cookie,从而实现对他人身份的冒用要解决这个问题,就要在Cookie中附加一项信息,这个信息需要具有以下特性:1、和该用户一一对应;2、伪造难度大这些内容和用户名一起,以Cookie的形式发送给用户的浏览器并且,服务器必须能够记住这项内容,以便用户再次访问的时候进行核对理论上,可以使用该用户的密码密码具备了前述的两个特点但是因为Cookie本身未经加密,保存于其中的密码(应该加密)可以被任何人看到,因此这个方法极不安全。

      另一种可以加以利用的信息是用户访问时的Sessionid因为Sessionid是一个由系统随机产生的、无规律的、长度较长的字符串,因此它很难被伪造要把它和用户对应起来,我们需要在数据库中添加一个表,这个表至少有两个字段,一个是用户名,一个是Sessionid当用户首次登录的时候,我们把当前的Sessionid和用户名分别用Cookie发送给用户,同时,把这两项作为一条记录插入数据库这样,当用户再次访问的时候,服务器就可以读取客户端发来的这两个Cookie,并且用它们的值和数据库中的记录比对如果在数据库中找到了相应记录,就说明这台电脑的确是该用户上次登录时使用的电脑,进而可以为该用户自动登录四、实现1、在登录页面中添加一个复选框,让用户选择是否愿意在一定时间内实现自动登陆,例如两周代码:<inputtype="checkbox"name="autologin">两周内自动登录2、在负责处理登录过程的Servlet中,判断用户是否选择了该复选框如果是,则执行这两个操作:向用户发送两个Cookie,以及向数据库写入一条相应的记录代码:CookieckUsername,ckSessionid;if(autologin.equals("on")){//如果用户选择了“两周内自动登录”,则向用户发送两个cookie。

      //一个cookie记录用户名,另一个记录唯一的验证码,//并将此验证码写入数据库,以备用户返回时查询防止伪造cookie)ckUsername=newCookie("autoLoginUser",user.getUsername());//user是代表用户的beanckUsername.setMaxAge(60*60*24*14);//设置Cookie有效期为14天res.addCookie(ckUsername);sessionid=session.getId();//取得当前的sessionidckSessionid=newCookie("sessionid",sessionid);ckSessionid.setMaxAge(60*60*24*14);res.addCookie(ckSessionid);//在数据库中插入相应记录userSessionDAO.insertUserSession(user,sessionid);}3、实现自动登录因为用户下次访问的时候,可能直接访问网站的任何页面(例如通过收藏夹),而不一定是首页或者登录页面,所以我们需要用Filter拦截到达该网站的所有请求,并执行自动登录。

      publicvoiddoFilter(ServletRequestreq,ServletResponseresp,FilterChainchain)throwsServletException,IOException{HttpServletRequestrequest=(HttpServletRequest)req;HttpSessionsession=request.getSession(true);Stringusername;Stringsessionid;//此sessionid是上次用户登录时保存于用户端的识别码,用于用户后续访问的自动登录不是本次访问的sessionidCookie[]cookies;CookieManagercm=newCookieManager();//CookieManager是一个自定义的类,用于从Cookie数组中查找并返回指定名称的Cookie值booleanisAutoLogin;//如果session中没有user对象,则创建一个Useruser=(User)session.getAttribute("user");if(user==null){user=newUser();〃此时user中的username属性为"",表示用户未登录。

      }//如果user对象的username为"",表示用户未登录则执行自动登录过程//否则不自动登录if(user.getUsername().equals("")){//检查用户浏览器是否发送了上次登录的用户名和sessionid,//如果是,则为用户自动登陆cookies=request.getCookies();username=cm.getCookieValue(cookies,"autoLoginUser");sessionid=cm.getCookieValue(cookies,"sessionid");isAutoLogin=userSessionDAO.getAutoLoginState(username,sessionid);//如果在数据库中找到了相应记录,则说明可以自动登录if(isAutoLogin){user.setUsername(username);user.setNickname(DBUtil.getNickName(username));session.setAttribute("user",user);//将userbean添加至Usession中。

      }}chain.doFilter(req,resp);}4、注销只有当用户在上次访问时,未经注销就离开网站,我们才能在该用户下次访问时执行自动登录如果用户显式的执行了注销操作,那就表示该用户不希望我们记住他我们需要在执行注销操作的Servlet中,从数据库中删除相应记录这样,下次用户访问的时候就不会执行自动登录了五、改进用户可能为了方便,自行修改Cookie中的有效期,从而达到长期自动登录的目的对某些存有敏感信息的网站来说,这样做并不安全当用户长时间没有使用他的电脑,或者将电脑遗弃、转让了,而保存于其中的Cookie仍然是有效的,这就为用户和网站带来潜在的风险要解决这个问题,我。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.