用cookie和session实现自动登录
程序员文章站
2022-03-03 16:16:00
...
算是今天的学习笔记吧。。。
在点击登录输入用户名和密码后,当验证用户名和密码都正确且有正确返回值时,在LoginSvl中创建一个cookie保存此用户名和密码:
创建一个过滤器,在下次登录时,当session中的user为空,则从cookie中获取上次保存的用户名密码,调用biz,通过biz调dao,验证cookie中保存的信息是否是否适用于此次登录,即验证数据库中密码或用户名是否改变,若改变,则清除此cookie。若没改变,则自动登录。
LoginFilter中的代码:
注:filter需要在web.xml中做响应配置。其中<url-pattern></url-pattern>中只能写/*,否则不能自动登录。
最后要在点击退出按钮时,清除cookie,以免其他用户无法登录:
LoginOutSvl中代码:
在点击登录输入用户名和密码后,当验证用户名和密码都正确且有正确返回值时,在LoginSvl中创建一个cookie保存此用户名和密码:
String unamepwd = user.getUname()+","+user.getPwd();
Cookie cookie=new Cookie("unamepwd",unamepwd);
cookie.setMaxAge(60*60*24*7);
response.addCookie(cookie);
创建一个过滤器,在下次登录时,当session中的user为空,则从cookie中获取上次保存的用户名密码,调用biz,通过biz调dao,验证cookie中保存的信息是否是否适用于此次登录,即验证数据库中密码或用户名是否改变,若改变,则清除此cookie。若没改变,则自动登录。
LoginFilter中的代码:
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest) req;
HttpServletResponse response=(HttpServletResponse) resp;
if(request.getSession().getAttribute("user") == null){
Cookie loginCookie=getLoginCookie(request, "unamepwd");
if(loginCookie != null){
String[] unamepwds=loginCookie.getValue().split(",");
UserBiz bbiz =new UserBiz();
User uuser=bbiz.login(unamepwds[0], unamepwds[1]);
if(uuser != null){
request.getSession().setAttribute("user", uuser);
}else{
Cookie cookie=new Cookie(loginCookie.getName(),null);
cookie.setMaxAge(0);
response.addCookie(cookie);
}
}
}
chain.doFilter(request, response);
}
private Cookie getLoginCookie(HttpServletRequest request,String cookieName){
Cookie strRet = null;
if(request.getCookies() != null){
Cookie[] cookies = request.getCookies();
for(int i=0;i<cookies.length;i++){
Cookie cookie = cookies[i];
String cm = cookie.getName();
if(cm.equals(cookieName)){
strRet = cookie;
break;
}
}
}
return strRet;
}
注:filter需要在web.xml中做响应配置。其中<url-pattern></url-pattern>中只能写/*,否则不能自动登录。
最后要在点击退出按钮时,清除cookie,以免其他用户无法登录:
LoginOutSvl中代码:
public void service(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
request.getSession().invalidate();
Cookie loginCookie = getLoginCookie(request, "unamepwd");
Cookie cookie=new Cookie(loginCookie.getName(),null);
cookie.setMaxAge(0);
response.addCookie(cookie);
request.getRequestDispatcher("MainSvl").forward(request,response);
}
private Cookie getLoginCookie(HttpServletRequest request,String cookieName){
Cookie strRet = null;
if(request.getCookies() != null){
Cookie[] cookies = request.getCookies();
for(int i=0;i<cookies.length;i++){
Cookie cookie = cookies[i];
String cm = cookie.getName();
if(cm.equals(cookieName)){
strRet = cookie;
break;
}
}
}
return strRet;
}
上一篇: ?使用
下一篇: 第3讲 --查询指定id的单个对象
推荐阅读
-
php中如何同时使用session和cookie来保存用户登录信息
-
用expect实现的自动登录到多台服务器的shell脚本
-
用expect实现ssh自动登录服务器并进行批量管理的实现方法
-
putty实现自动登录的方法(ssh和ssh2)
-
PHP中SSO Cookie登录分析和实现
-
PHP 实现超简单的SESSION与COOKIE登录验证功能示例
-
php利用cookie实现自动登录的方法
-
Android SharedPreferences实现记住密码和自动登录
-
用node和express连接mysql实现登录注册的实现代码
-
Android通过SharedPreferences实现自动登录记住用户名和密码功能