问题描述:

一些网站的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

使用session实现网站N天免登陆()的更多相关文章

  1. [saiku] 免登陆进入管理后台

    上一篇分析了介绍了如何简化和修改saiku的界面[http://www.cnblogs.com/avivaye/p/4877882.html] 这一篇说明下如何去掉免登陆进入saiku 管理台 1.修 ...

  2. 个人总结-9-session的使用,十天免登陆

    昨天查看bootstrap,实现了登录和注册页面的重写. 今天准备加入session实现,十天免登陆等内容. 使用bootstrap直接套用标签页,以实现.

  3. 如何实现免登陆功能(cookie session?)

    Cookie的机制 Cookie是浏览器(User Agent)访问一些网站后,这些网站存放在客户端的一组数据,用于使网站等跟踪用户,实现用户自定义功能. Cookie的Domain和Path属性标识 ...

  4. 利用Session实现三天免登陆

    什么是Session Session:在计算机中,尤其是在网络应用中,称为“会话控制”.(百度百科) Session:服务器端的数据存储技术. Session要解决什么问题 一个用户的不同请求(重定位 ...

  5. 项目总结之Oauth2.0免登陆及相关知识点总结

    简介Oauth2.0授权步骤 授权码模式的基本步骤 原文链接地址 (A)用户访问客户端,后者将前者导向认证服务器. (B)用户选择是否给予客户端授权. (C)假设用户给予授权,认证服务器将用户导向客户 ...

  6. JavaWeb 08_JSP+Dao+Bean+Servlet 实现登录注册(连接数据库,验证码登录,两周内免登陆等功能)

    一.数据库db_01   表usert   字段username,password 二. 目录 三. 配置信息 四. 代码 index.jsp <script type="text/j ...

  7. 2015.4.21 实现一般免登陆,微博QQ分享,字体自适应等

    1.实现一般的登录验证和免登陆: 解决方法:node方法代码,nodeJS实现的session模块,不完整,但能用,仅供参考. 语言无所谓,session的机制都是一样的,实现不一样而已,:   2. ...

  8. C#网站实现QQ第三方登陆# C#快速开发教程

    C#网站实现QQ第三方登陆 说起在网站上面可以直接使用QQ登录功能大家并不陌生.但翻其官方提供的SDK包中却没有C#方向的. 但是我们有个牛人叫张善友,做了一个民间SDK.下面我们就是用他所写的SDK ...

  9. 帝国cms7.5免登陆发布模块

    帝国cms7.5免登陆发布文章. 帝国cms增加了金刚模式,登录发布文章有难度.免登录发布模块配合火车采集器,完美解决你遇到的问题. 1.必备工具: 1.火车采集器 2.免登陆发布接口 3.帝国cms ...

随机推荐

  1. 事件驱动之JDK观察者模式

    JDK中关于观察者模式主要了解俩个概念 Observer观察者 Observable事件源:当事件源发生某事件时,有两个事情需要注意 1.里面有一个isChange属性  当为false时不会发通知给 ...

  2. container_of 宏

    宏的作用 该宏的作用就是根据结构体中一个成员变量的地址求结构体首地址 如何做到 如果要想根据结构体成员的地址求结构体的首地址,我们需要分三步: 第一步:明确成员变量的地址: 第二步:计算成员变量在该结 ...

  3. count(*) 优化

    几种获取记录数的方法 count(*): MySQL 优化过,扫描的行数小于总记录数.执行效率高. count(1): 遍历所有记录,不取值,对每行尝试添加一个 "1" 列,如果不 ...

  4. Beta冲刺——第八天

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/2018SE1 这个作业要求在哪里 https://edu.cnblogs.com/campus/fz ...

  5. JDK动态代理案例与原理分析

    一.JDK动态代理实现案例 Person接口 package com.zhoucong.proxy.jdk; public interface Person { // 寻找真爱 void findlo ...

  6. 强大生产力工具Alfred

    今天要给大家介绍的工具是Alfred,一款Mac下的高效生产力产品.它能做什么呢?简单的说就是:让你能够通过打几个字,就可以完成原本需要一顿操作的事情.举一个简单的栗子:如果我们要在Google搜索一 ...

  7. 紧急预警】关于爆发的 incaseformat 病毒事件亲身体验

    相关报道 incaseformat病毒 360安全卫士服务号 https://mp.weixin.qq.com/s/KM6esd1eUlBt-YHtEwnfuw 广东省网络安全应急响应平台 https ...

  8. Java 用java GUI写一个贪吃蛇小游戏

    目录 主要用到 swing 包下的一些类 上代码 游戏启动类 游戏数据类 游戏面板类 代码地址 主要用到 swing 包下的一些类 JFrame 窗口类 JPanel 面板类 KeyListener ...

  9. 树莓派3B装ubuntu server后开启wifi

    树莓派官网选择ubuntu server下载映像 step 1: 使用SDFormatter格式化SD卡: step2: 使用win32diskimager工具将映像写入准备好的SD卡: step3: ...

  10. ftp设置二进制上传

    一个不重要的数据库,备份是用expdp导出,然后上传到ftp服务器上面.上周这个主机宕机了,要在别的数据库恢复,发现报如下错误: ORA-39001: invalid argument value O ...