问题描述:

一些网站的N天之内免登陆实现方式。

方式一:

首先想到的是使用cookie保存用户登录信息,设置有效期,在用户下次访问时免去登录环节,直接通过cookie获取用户信息。

方式二:

方式二:直接将session会话保存,用户下次访问时,继续使用这个session。

相比之下session显得更加安全,但是,大家知道,session会随着浏览器的关闭而消失(确切的说,是在客户端消失,服务器端的session存活周期取决于相应配置),当用户下次启动浏览器,访问网站时,又会得到由网站自动分配的新的session。那么,问题来了:

如何做到关闭浏览器后到下次登录时session仍然有效?

思路:

  1. 在用户登录成功时,创建session对象,保存用户信息。
  2. 将此session的sessionid保存到cookie中。
  3. 同时将sessionid于session对应关系存储到应用域中,以便后面可以根据sessionid来获取到session。
  4. 在用户关闭浏览器,重新打开浏览器访问网站时,读取用户的cookie,得到sessionid。
  5. 根据sessionid获取到第3步存储到应用域中的session对象。
  6. 从session中读取用户信息。

代码实现:

用户登录Servlet:

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//得到用户post提交的账号
String name = request.getParameter("name");
//得到用户post提交的密码
String pwd = request.getParameter("pwd");
//创建session
HttpSession session=request.getSession();
//往session中储存用户信息
session.setAttribute("name", name);
session.setAttribute("pwd", pwd);
//创建一个cookie用于保存sessionid
Cookie cookie = new Cookie("session", session.getId());
//设置cookie的有效时间
cookie.setMaxAge(Integer.MAX_VALUE);
//将cookie添加到响应行
response.addCookie(cookie);
//此时需要在应用域中添加一个属性,用于储存用户的sessionid和对应的session关系
//以保证后面可以根据sessionid获取到session
getServletContext().setAttribute(session.getId(), session);
//重定向到用户信息页面
response.sendRedirect("user.jsp");
}

用户信息JSP页面:

<%
//获取请求中的所有cookie,得到cookies数组
Cookie[] cookies = request.getCookies();
//如果cookies数组不为null,并且它的长度大于0
if (cookies != null && cookies.length > 0){
//就循环遍历每一条cookie
for (Cookie cookie : cookies) {
//如果cookie的名称为session
if ("session".equals(cookie.getName())) {
//则读取这个cookie的值,得到sessionid
//然后再根据sessionid,获取储存在应用域中的session对象
//强转后,赋值给当前session对象,因为jsp中session对象已经被自动创建,所以这里只需要赋值
session = (HttpSession) application.getAttribute(cookie
.getValue());
}
}
}
%>
<!-- 读取session中的用户配置信息 -->
你好<%=session.getAttribute("name")%>,<%=session.getAttribute("pwd")%>

原文地址:

http://blog.csdn.net/a997208868/article/details/47787305

最新文章

  1. python-copy模块使用
  2. MySQL 子查询与连接操作笔记
  3. Ionic基础——侧边栏ion-side-menus 以及ion-tap结合侧边栏详解
  4. activiti自定义流程之Spring整合activiti-modeler5.16实例(二):创建流程模型
  5. HTML自动换行的问题
  6. Hibernate优化
  7. C#做的一个加密/解密的类
  8. hdu 5012 Dice
  9. [半原创]指纹识别+谷歌图片识别技术之C++代码
  10. 【NOIP2013提高组】火柴排队
  11. Sublime 安装、插件CoolFormat
  12. nginx+多个tomcat
  13. CSL 的字符串(单调栈)
  14. udp套接字及利用socketserver模块实现并发以及并发编程
  15. 和嗲妹妹面试python,是种什么体验?
  16. 关于Python的面试题
  17. windows server 2008 HPC Edtion激活教程
  18. 纯 js 实现上传文件支持拖拽
  19. 【NOIP模拟赛】就 反悔贪心
  20. idea中如何配置git以及在idea中初始化git

热门文章

  1. Java学习日报7.10
  2. web攻防环境--一句话木马
  3. “You may need an appropriate loader to handle this file type”
  4. CentOS 7 网卡注释
  5. 【小菜学网络】MAC地址详解
  6. WPF + RDLC + 动态生成列 + 表头合并
  7. 借助Docker搭建JMeter+Grafana+Influxdb监控平台
  8. 机器学习算法-PCA降维技术
  9. 在Linux系统下限制指定目录的大小以及文件/文件夹数量
  10. SpringBoot 导入插件报错 Cannot resolve plugin org.springframework.boot:spring-boot-maven-plugin:2.4.1