使用session实现网站N天免登陆(转载)


问题描述:

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值