一、前言
1、当登录一个网站时,网站往往会请求用户输入用户名和密码,并且用户可以勾选“下次自动登录”。如果勾选了,那么下次访问同一网站时,用户会发现没输入用户名和密码就已经登录了。这正是因为前一次登录时,服务器发送了包含登录凭据(用户名加密码的某种加密形式)的Cookie到浏览器,浏览器将cookie保存到了用户的硬盘上。第二次登录时,(如果该Cookie尚未到期)浏览器会发送该Cookie,服务器验证凭据,于是不必输入用户名和密码就让用户登录了。
2、通常我们在浏览网站时,有些页面是需要我们登陆之后才能浏览到的,其实这就用到了session
二、需求
现在通过一个简单的小例子来模拟这两个需求。
1、现有一个登陆页面,然后有两个可供浏览的页面,这两个页面的都是需要登陆之后才能访问;
2、在提交登陆请求后需要进行身份验证,验证通过后跳到指定页面;如果未通过则重新回到登录页面,并显示错误信息“用户名或密码输入错误!”;
3、在第一次登录时需要输入用户名和密码,但是第一次之后则不用输入用户名;
4、如果用户想要直接使用供浏览页面的url来访问这两个页面,则跳转到登录页面,并提示“请先登录!”。
三、需求分析
(一)其流程图大概如下:
(二)其各部分功能如下
login.jsp:
1 | 1、提供登录表单 |
loginServlet:
1 | 1、需要处理乱码问题 |
succ1.jsp:
1 | 1、判断用户是否登录 |
succ2.jsp:
1 | 1、判断用户是否登录 |
(三)该案例中使用request域和request的请求转发,以及session域和cookie的具体地方
注意:一定要尽可能的使用更小的域!
四、代码实现
(一)目录结构
(二)源代码
login.jsp:
1 | <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%-- 导包 --%> |
loginServlet:
1 | import java.io.IOException; |
succ1.jsp:
1 | <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> |
succ2.jsp:和succ1.jsp只有最后两个h1标签不一样
1 | <h1>我是succ2页面</h1><br/><br/> |
五、测试结果
1、在浏览器中输入:http://localhost:8080/day11_3/session2/login.jsp
2、登陆失败:
3、登陆成功后:
4、通过“浏览succ2链接”访问succ2:
5、尝试直接使用succ1的链接地址来访问:
6、第二次登陆:
六、需要注意的地方
(一)Cookie需要处理中文
Cookie使用Unicode字符时需要对Unicode字符进行编码。
1 | 设置Cookie时: |
1 | 获取Cookie时: |
(二)在jsp中进行Cookie进行解码时,记得导包
1 | <%@ page import="java.net.URLDecoder" %> |
七、Cookie和Session的基础知识
1、Cookie:介绍会话技术、Cookie的API、详解、应用
2、Session:Session介绍、API、生命周期、应用、与Cookie区别
Java新手,若有错误,欢迎指正!