使用session实现网站N天免登陆()
2024-10-19 14:38:14
问题描述:
一些网站的N天之内免登陆实现方式。
方式一:
首先想到的是使用cookie保存用户登录信息,设置有效期,在用户下次访问时免去登录环节,直接通过cookie获取用户信息。
方式二:
方式二:直接将session会话保存,用户下次访问时,继续使用这个session。
相比之下session显得更加安全,但是,大家知道,session会随着浏览器的关闭而消失(确切的说,是在客户端消失,服务器端的session存活周期取决于相应配置),当用户下次启动浏览器,访问网站时,又会得到由网站自动分配的新的session。那么,问题来了:
如何做到关闭浏览器后到下次登录时session仍然有效?
思路:
- 在用户登录成功时,创建session对象,保存用户信息。
- 将此session的sessionid保存到cookie中。
- 同时将sessionid于session对应关系存储到应用域中,以便后面可以根据sessionid来获取到session。
- 在用户关闭浏览器,重新打开浏览器访问网站时,读取用户的cookie,得到sessionid。
- 根据sessionid获取到第3步存储到应用域中的session对象。
- 从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")%>
原文地址:
最新文章
- python-copy模块使用
- MySQL 子查询与连接操作笔记
- Ionic基础——侧边栏ion-side-menus 以及ion-tap结合侧边栏详解
- activiti自定义流程之Spring整合activiti-modeler5.16实例(二):创建流程模型
- HTML自动换行的问题
- Hibernate优化
- C#做的一个加密/解密的类
- hdu 5012 Dice
- [半原创]指纹识别+谷歌图片识别技术之C++代码
- 【NOIP2013提高组】火柴排队
- Sublime 安装、插件CoolFormat
- nginx+多个tomcat
- CSL 的字符串(单调栈)
- udp套接字及利用socketserver模块实现并发以及并发编程
- 和嗲妹妹面试python,是种什么体验?
- 关于Python的面试题
- windows server 2008 HPC Edtion激活教程
- 纯 js 实现上传文件支持拖拽
- 【NOIP模拟赛】就 反悔贪心
- idea中如何配置git以及在idea中初始化git
热门文章
- Java学习日报7.10
- web攻防环境--一句话木马
- “You may need an appropriate loader to handle this file type”
- CentOS 7 网卡注释
- 【小菜学网络】MAC地址详解
- WPF + RDLC + 动态生成列 + 表头合并
- 借助Docker搭建JMeter+Grafana+Influxdb监控平台
- 机器学习算法-PCA降维技术
- 在Linux系统下限制指定目录的大小以及文件/文件夹数量
- SpringBoot 导入插件报错 Cannot resolve plugin org.springframework.boot:spring-boot-maven-plugin:2.4.1