java web session+cookie实现用户自动登录
来源:互联网 发布:unity3d树木高模 编辑:程序博客网 时间:2024/05/28 20:20
在之前的博文中介绍了项目中防止用户重复登录的方案及解决非法退出异常的处理方法——监听浏览器关闭事件onbeforeunload,发送ajax请求到服务器端执行正常退出程序,以避免用户被锁死的情况。然后在实际的测试中发现,有些浏览器如火狐是无法监听到beforeunload事件的,除此以外,在本地和内部测试服务器都能成功监听到,部署到项目的电信服务器上就经常出现无法监听的情况,这样在使用时非常影响用户体验。因此,考虑使用session和cookie实现用户自动登录的方案,这样即使用户不小心关闭浏览器,再次输入项目地址时能直接登入系统,从而避免了用户直接关闭浏览器后无法再次登录。
首先,在项目默认页index.jsp,进行重定向操作至logincookie.action。
<%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";response.sendRedirect(basePath+"logincookie.action"); %>在logincookie.action方法中,获取当前的cookie和session,如果cookie中存在用户信息(username)且session中存放有已登录用户的信息(logicId,username,logintime等),则自动跳转至登录成功页面(action跳转),否则进入用户登录页面。
public String loginCookie() throws Exception{ActionContext acx=ActionContext.getContext(); Cookie[] cookies=this.request.getCookies(); if(cookies==null){ return "login"; } HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session=request.getSession(false); String sessionId = session.getId(); if(ifCookieUserAnddiffSession(sessionId)!=null) { //清理loginUserMap中的用户信息 username=ifCookieUserAnddiffSession(sessionId).getValue(); userlogicId=userManageService.findbyUsername(username).getLogicId(); loginUserMap = (Map<Long, String>) acx.getApplication().get(WebConstant.LOGIN_USER_MAP); if(loginUserMap!=null&&loginUserMap.containsKey(userlogicId)) {loginUserMap.remove(userlogicId);session.getServletContext().setAttribute(WebConstant.LOGIN_USER_MAP, loginUserMap); } } //如果session发生变化(过期),进入登录页面 for(Cookie cookie:cookies) { if(cookie.getName().equals("JSESSIONID")) { if(!cookie.getValue().equals(sessionId)){ return "login"; } } } //自动登录 for(Cookie cookie2:cookies) { if(cookie2.getName().equals("user")&&cookie2.getValue()!=null){ username=cookie2.getValue(); userlogicId=userManageService.findbyUsername(username).getLogicId(); try{ if(acx.getSession().get(WebConstant.USER_ID).toString().equals(username)) return "mainframe"; else { return "login";} }catch(NullPointerException e) { return "login"; } } } return "login";}值得一提的是,当用户拦截器拦截非法注入等操作的时候,也将跳回index.jsp,这时的sessionId发生变化,需先清除loginUserMap并进入登录页。
当用户登录时,新建一个cookie,将username作为一个属性存放在cookie中,设置cookie的失效时间,然后将sessionId存放到cookie的JsessionId属性中,添加cookie。
//添加cookieCookie cookie=new Cookie("user",username);cookie.setMaxAge(10*60*60);//设置cookie失效时间cookie.setPath("/");response.addCookie(cookie);if(cookies!=null){for(Cookie cookie2:cookies){ if(cookie2.getName().equals("JSESSIONID")){ cookie2.setValue(sessionId); cookie2.setMaxAge(10*60*60); cookie2.setPath("/"); response.addCookie(cookie2);}}}
当用户执行安全退出时,清除cookie。
// 清除cookieCookie[] cookies=request.getCookies();if(cookies!=null){for(Cookie cookie: cookies){if(cookie.getValue().equals(username)){cookie.setValue(null);cookie.setMaxAge(0);cookie.setPath("/");response.addCookie(cookie);}}}这样就能实现session结合cookie的自动登录。
0 0
- java web session+cookie实现用户自动登录
- java Cookie+Session实现自动登录
- 使用cookie,session,filter等技术实现用户自动登录
- Java网站中的自动登录功能如何实现 Session Cookie
- JAVA通过Session和Cookie实现网站自动登录代码
- 利用cookie+session实现自动登录
- php用户登录代码session、cookie自动记忆功能
- Cookie与session 用户登录
- JAVA通过Session和Cookie实现网站自动登录的技术
- JAVA通过Session和Cookie实现网站自动登录的技术
- JAVA通过Session和Cookie实现网站自动登录的技术
- [Java开发] cookie、session及实现记住密码,自动登录思路
- JAVA通过Session和Cookie实现网站自动登录的技术
- cookie,session,实现服务器记忆用户登录状态功能
- java使用cookie实现下次自动登录
- Java利用Cookie实现自动登录
- java读写cookie实现自动登录
- java操作cookie 实现两周内自动登录
- Spring 开启Annotation <context:annotation-config> 和 <context:component-scan>诠释及区别
- 获取图像像素点的概率分布图
- java初始化顺序
- bzoj 3172(AC自动机)
- BZOJ1607 Patting Heads轻拍牛头
- java web session+cookie实现用户自动登录
- 关键字
- ArrayList LinkList Vector
- 数据结构学习总结
- [leetcode]Minimum Size Subarray Sum
- 1.canvas只刮刮乐
- BZOJ2527: [Poi2011]Meteors
- 动态RAM的刷新
- PAT乙级测试题及JAVA参考例程