zoukankan      html  css  js  c++  java
  • 使用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

  • 相关阅读:
    ConcurrentHashMap实现原理--转载
    java原子操作的实现原理--转载
    Catch Me If You ... Can't Do Otherwise--转载
    微框架spark--api开发利器
    Exploring Micro-frameworks: Spring Boot--转载
    简约之美jodd--props属性使用
    jodd-cache集锦
    java根据url获取完整域名
    Jodd-vtor验证框架
    倒排列表求交集算法 包括baeza yates的交集算法
  • 原文地址:https://www.cnblogs.com/aixing/p/13327684.html
Copyright © 2011-2022 走看看