java Cookie+Session实现自动登录

       这是2016年的第一篇blog,首先在这里祝大家新年工作开心,平平安安,生活舒心,日子红红火火

       之前我们聊过PHP的自动登录,我们也非常详细的给大家分析了实现的原理,有了上次课的基础(PHP自动登录

的链接:http://blog.csdn.net/bayren820/article/details/50397633),相信大家对于今天java实现同样的功能,就不会

感到特别陌生了,大不了就是语法不一样,好了,我们开始今天的分享!

       还是老规矩,我们结合代码,给大家做详细讲解:

       登录界面(就是一个普通的Servlet)

        out.println("

用户登录

");
        out.println("
");
        out.println("用户名:");
        out.println("密码:");
        out.println("");
        out.println("
");

        中间处理页面(我们重点不是聊数据库,因此这里就不连接数据库了)

response.setContentType("text/html");
PrintWriter out = response.getWriter();

        // java接收表单传递过来的参数,都是String字符类型
        String uname = request.getParameter("uname");
        String upassword = request.getParameter("upassword");

        // 创建一个Session对象
        HttpSession session = request.getSession();
        if("123".equals(upassword)){
        // session给属性赋值,和PHP里面的$_SESSION['uname']是一样的功能
        session.setAttribute("uname", uname);
        // cookie存储两周的SessionID,我们说过,这里Cookie的名字,必须是浏览器自动返回的固定名字

                // 因为当我们用这个JSESSIONID的名字存储Cookie时,服务器端会自动帮助我们判断,无需额外代码
        Cookie cookie = new Cookie("JSESSIONID",session.getId());
        cookie.setMaxAge(2*7*24*3600);

                // 需要response对象,将Cookie写入本地浏览器
        response.addCookie(cookie);
        }

        判断登录状态,读取用户名界面

        HttpSession session = request.getSession();

        // 读取属性uname的值,由于我们用Cookie保存了JSESSIONID的生命周期

        // 因此即使你重启了浏览器,我们依旧能够在服务器端SessionID没有过期之前,获取到用户名
        String uname = (String) session.getAttribute("uname");
        if(uname != null){
    out.print(uname+"");
        }

        大部分的代码结束了,但是有几个问题需要注意:

        1.  表单提交中文乱码问题,由于我们是post提交,因此解决方案十分容易,在中间处理页面加上一句话即可:

             request.setCharacterEncoding("utf8"),这样request过来的参数都转成了utf8编码,防止了中文乱码!

        2.Cookie存储中文乱码的问题(虽然本次课程没有涉及到,但是这个知识点我还是准备在这里分享,以后我们肯

            定会用到的,大家先有个印象),java中默认Cookie存储中文是会乱码的,这一点没有PHP做的好,下面我们

            讲讲解决办法:在中间处理页面,加上一句:java.net.URLEncoder.encode("uname","utf8"),进行Base64转

            码;然后在读取页面,再加上一句java.net.URLDecoder.decode("uname","utf8"),进行解码即可!


好了,分享到此结束,今天干货真是非常多,大家好好理解!!!预告一下,下次分享的内容:PHP的Yii框架

大家可以关注我的微信公众号:iwork,我会每天推送一篇原创文章,让大家都能有所收获!

java Cookie+Session实现自动登录_第1张图片

你可能感兴趣的:(Java开发)