使用session实现网站N天免登陆

一些网站的3天免登陆是如何做到的?

    方式一:首先想到的是使用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中读取用户信息
OVER

代码如下:

 用户登录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")%>




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值