使用session实现网站N天免登陆()
问题描述:
一些网站的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")%>
原文地址:
使用session实现网站N天免登陆()的更多相关文章
- [saiku] 免登陆进入管理后台
上一篇分析了介绍了如何简化和修改saiku的界面[http://www.cnblogs.com/avivaye/p/4877882.html] 这一篇说明下如何去掉免登陆进入saiku 管理台 1.修 ...
- 个人总结-9-session的使用,十天免登陆
昨天查看bootstrap,实现了登录和注册页面的重写. 今天准备加入session实现,十天免登陆等内容. 使用bootstrap直接套用标签页,以实现.
- 如何实现免登陆功能(cookie session?)
Cookie的机制 Cookie是浏览器(User Agent)访问一些网站后,这些网站存放在客户端的一组数据,用于使网站等跟踪用户,实现用户自定义功能. Cookie的Domain和Path属性标识 ...
- 利用Session实现三天免登陆
什么是Session Session:在计算机中,尤其是在网络应用中,称为“会话控制”.(百度百科) Session:服务器端的数据存储技术. Session要解决什么问题 一个用户的不同请求(重定位 ...
- 项目总结之Oauth2.0免登陆及相关知识点总结
简介Oauth2.0授权步骤 授权码模式的基本步骤 原文链接地址 (A)用户访问客户端,后者将前者导向认证服务器. (B)用户选择是否给予客户端授权. (C)假设用户给予授权,认证服务器将用户导向客户 ...
- JavaWeb 08_JSP+Dao+Bean+Servlet 实现登录注册(连接数据库,验证码登录,两周内免登陆等功能)
一.数据库db_01 表usert 字段username,password 二. 目录 三. 配置信息 四. 代码 index.jsp <script type="text/j ...
- 2015.4.21 实现一般免登陆,微博QQ分享,字体自适应等
1.实现一般的登录验证和免登陆: 解决方法:node方法代码,nodeJS实现的session模块,不完整,但能用,仅供参考. 语言无所谓,session的机制都是一样的,实现不一样而已,: 2. ...
- C#网站实现QQ第三方登陆# C#快速开发教程
C#网站实现QQ第三方登陆 说起在网站上面可以直接使用QQ登录功能大家并不陌生.但翻其官方提供的SDK包中却没有C#方向的. 但是我们有个牛人叫张善友,做了一个民间SDK.下面我们就是用他所写的SDK ...
- 帝国cms7.5免登陆发布模块
帝国cms7.5免登陆发布文章. 帝国cms增加了金刚模式,登录发布文章有难度.免登录发布模块配合火车采集器,完美解决你遇到的问题. 1.必备工具: 1.火车采集器 2.免登陆发布接口 3.帝国cms ...
随机推荐
- udp聊天室--简易
package 聊天; /*一切随便消逝吧*/ import java.net.DatagramSocket; import java.net.SocketException; public clas ...
- mysql5.7.20压缩版安装
1.官网下载.zip格式的MySQL Server的压缩包,选择x86或x64版,并解压. 2. 创建 data文件夹 及 my.ini文件,并编辑 [mysqld] # 设置为自己MYSQL的安装目 ...
- [ABP教程]第二章 图书列表页面
Web应用程序开发教程 - 第二章: 图书列表页面 关于本教程 在本系列教程中, 你将构建一个名为 Acme.BookStore 的用于管理书籍及其作者列表的基于ABP的应用程序. 它是使用以下技术开 ...
- node.js常用内置模块一
在使用内模块的时候需要先将所需的内置模块进行引入. OS模块 在nodejs中OS模块提供了与操作系统相关的属性和方法 // 导入OS内置模块,必须先进行导入,否则无法使用 const os = re ...
- LeetCode344 反转字符串
编写一个函数,其作用是将输入的字符串反转过来. 示例 1: 输入: "hello" 输出: "olleh" 示例 2: 输入: "A man, a p ...
- 【剑指Offer】链表的基本操作之创建、插入、删除
// C++ #include<iostream> using namespace std; //链表的定义 struct ListNode { int val; ListNode* ne ...
- MySQL的索引优化分析(一)
一.SQL分析 性能下降.SQL慢.执行时间长.等待时间长 查询语句写的差 索引失效关联查询太多join(设计缺陷) 单值索引:在user表中给name属性创建索引,create index idx_ ...
- Loadrunner录制脚本与编写脚本的区别
异同点: 1.录制的和编写的脚本质量上没有区别 2.性能脚本关心的是用户和服务器的数据交互,从这点上来看,录制和编写也没有区别,手动编写脚本也可以写出很真实的脚本 3.能录制的情况下,就录制吧,谁每天 ...
- buuctf刷题之旅—web—EasySQL
打开环境,发现依旧是sql注入 GitHub上有源码(https://github.com/team-su/SUCTF-2019/tree/master/Web/easy_sql) index.php ...
- Spring Boot Scheduled定时任务特性
SpringBoot中的Scheduled定时任务是Spring Boot中非常常用的特性,用来执行一些比如日切或者日终对账这种定时任务 下面说说使用时要注意的Scheduled的几个特性 Sched ...