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