**
一、cookie
**
1、cookie是什么?
cookie是servlet发送到web浏览器的少量信息,这些信息由浏览器保存,然后发送回服务器。cookie 的值可以唯一地标识客户端,因此 cookie 常用于会话管理。
2、cookie的产生过程
第一步:创建cookie。
Cookie remember_cookie = new Cookie("remember", username);
第二步:服务器通过response添加到浏览器。
//URL一定要包括uri
String uri=request.getContextPath()+"/back/ToLoginPageServlet";
remember_cookie.setPath(uri);
response.addCookie(remember_cookie);
第三步:浏览器通过cookie头,将cookie的信息携带到服务器
第四步:服务器通过request读取cookies,然后通过name来找到自己想要的cookie
Cookie[] cookies = request.getCookies();
Cookie remenberUsername =CookieUtil.cookieUtil(cookies, "remember");
注意:只有当URL包含了cookie的路径时,才会将cookie的信息携带给浏览器,在写程序的过程中就少写了一个单词,造成URL没有包括cookie的路径,结果得到的cookie的值都是null,找了很久的错都没找出来,还是经验不足呀。
3、cookie的常见方法
①设置cookie的时效:
setMaxAge(秒为单位),若为正数,cookie的时效就是你设置的时间;若为0,则表示立即删除该cookie;若为-1,则表示不存储该cookie。
有set当然也有getMaxAge()。
②设置cookie的路径:
setPath(cookie的路径),这个路径一定要是URL包含它。
③将cookie添加到浏览器:
response.addCookie(cookie)
④获得所有的cookie:
Cookie[] cookies = request.getCookies();
4、实现自动登录和记住账号
第一步:获得所有的cookie值
Cookie[] cookies = request.getCookies();
Cookie remenberUsername =CookieUtil.cookieUtil(cookies, "remember");
Cookie autoLogin = CookieUtil.cookieUtil(cookies, "autoLogin");
第二步:判断remenberUsername和autoLogin是否为空
2.1:如果autoLogin不为空,则进行自动登录操作
if(autoLogin!=null){
System.out.println("自动登录");
//进行自动登录
String usernameAndPassword = autoLogin.getValue();
String[] split = usernameAndPassword.split("##");
String username=split[0];
String password=split[1];
SysUser sysUser = new SysUser();
sysUser.setUsername(username);
sysUser.setPassword(password);
//进行登录操作
SysUser login = userService.sysUserService(sysUser);
String name = login.getName();
if(login!=null){//登录成功
//3、直接跳转到登录成功界面
request.setAttribute("name", name);
String contextPath = request.getContextPath();
//request.getRequestDispatcher("/WEB-INF/jsp/back/success.jsp").forward(request, response);
response.sendRedirect(contextPath+"/back/ManagerServlet?method=tomanagerUI");
}
}
2.2如果remenberUsername不为空,则将用户名设置为前一次登录的 用户名
if(remenberUsername!=null){
//设置用户名
String username = remenberUsername.getValue();
request.setAttribute("username", username);
}
第三步:如果两个都不是,则进行登录操作
5、如何实现登出操作
将cookie的时效设置为0,但是这个好像不能在浏览器中删除cookie,但是可以直接跳到登录界面,用户名和密码都是空的。
在写注销的页面跳转时也遇到了一点点小问题,由于页面是分为三大块的,分别是上、中、下。页面截图如下:
退出按钮是在上面那个页面上,所以当时就写了href,进入注销的servlet,导致只有上面那部分跳到了登录界面,如下图:
后来在上加了一个target=”_top”就可以了。
当我们获得的cookie值为空的时候,我们不妨看两个地方:
1、在浏览器的设置里面是否将允许网站保存和读取Cookie数据关闭了。
2、设置Cookie的路径的时候URL是否包含了它。
二、session
1、Session是什么?
Session是服务器端的会话保存技术。
2、Session的创建过程
当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识——-称为session id,如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。
3、如何创建和销毁Session
//创建Session
HttpSession session = request.getSession();
session.setAttribute("validateCodeServer", stringBuilder);
//session清空
HttpSession session = request.getSession();
session.invalidate();
//得到服务器存的验证码
HttpSession session = request.getSession();
Object attribute = session.getAttribute("validateCodeServer");
4、Session什么时候销毁
①服务器非正常关闭
②一次会话结束或者超过设置的时间,web.xml->SessionConfig timeout
③手动销毁:session.invalidate();