java Cookie+Session实现自动登录

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

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

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

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

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

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

        out.println("<h1>用户登录</h1>");
        out.println("<form action='/MyCookies/Icookiedeal' method='post'>");
        out.println("用户名:<input type='text' name='uname'>");
        out.println("密码:<input type='password' name='upassword'>");
        out.println("<input type='submit' value='提交'>");
        out.println("</form>");

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

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+"</h1>");
        }

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

        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,我会每天推送一篇原创文章,让大家都能有所收获!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值