使用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 ...
随机推荐
- Java学习日报8.2
package user;import java.util.*; public class User { private String kouling; private String u; priva ...
- 数据库1 --- > 数据库概念、安装、卸载
数据库概念 为什么学习数据库?1.web中的数据量非常大:2. 数据不方便存储和管理 什么是数据库: 用于存储和管理数据的仓库 数据库的特点: 数据可以实现持久化存储,其实数据库就是一个文件系统. ...
- Beta冲刺——第六天
这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/2018SE1 这个作业要求在哪里 https://edu.cnblogs.com/campus/fz ...
- Sqoop(四)增量导入、全量导入、减量导入
增量导入 一.说明 当在生产环境中,我们可能会定期从与业务相关的关系型数据库向Hadoop导入数据,导入数仓后进行后续离线分析.这种情况下我们不可能将所有数据重新再导入一遍,所以此时需要数据增量导入. ...
- vue调起微信扫一扫
vue调起微信扫一扫,两个注意的点 1.url必须是不带参的地址栏,如果传了带参数的地址url有可能会出现安卓机能调,苹果机报错或者安卓和苹果都报错 2.this指代问题在vx.ready等等方法里面 ...
- Netty源码解析 -- 对象池Recycler实现原理
由于在Java中创建一个实例的消耗不小,很多框架为了提高性能都使用对象池,Netty也不例外. 本文主要分析Netty对象池Recycler的实现原理. 源码分析基于Netty 4.1.52 缓存对象 ...
- MySQL审计audit
导读: MySQL社区版是不带审计功能的,如果要使用MySQL审计,可以考虑使用中间件(例如proxysql)或者是MariaDB的审计插件.这里以MariaDB的审计插件为例,实现MySQL 5.7 ...
- python实现99乘法表
for x in range(1,10): for y in range(1,10): if x>=y: print("%d*%d=%d\t"%(y,x,x*y),end=' ...
- Serverless 如何应对 K8s 在离线场景下的资源供给诉求
本文整理自腾讯云云原生产品团队的专家产品经理韩沛在 Techo 开发者大会云原生专题的分享内容--Kubernetes 混部与弹性容器.本次分享主要分为三部分:基于 K8s 的应用混部.提升应用混部效 ...
- Java基础学习总结笔记
Java基础 Java常用内存区域 栈内存空间:存储引用堆内存空间的地址 堆内存空间:保存每个对象的具体属性内容 全局数据区:保存static类型的属性 全局代码区:保存所有的方法定义 修饰符 权限修 ...