目录
一、Cookie与Session的关联
二、Cookie
1、含义
1.1、服务器通知客户端保存键值对的一种技术
1.2、客户端有了Cookie后,每次请求都发送给服务器
1.3、每个Cookie的大小不超过4kb
2、Cookie的创建
public class CookieServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决响应中文乱码问题
resp.setContentType("text/html;charset=UTF-8");
//1、创建Cookie对象
Cookie cookie1=new Cookie("key1","value1");
Cookie cookie2=new Cookie("key2","value2");
Cookie cookie3=new Cookie("key3","value3");
//2、通知客户端保存Cookie
resp.addCookie(cookie1);
resp.addCookie(cookie2);
resp.addCookie(cookie3);
resp.getWriter().write("cookie创建成功");
}
}
3、Cookie的获取
3.1、获取全部的cookie
//解决响应中文乱码问题
resp.setContentType("text/html;charset=UTF-8");
Cookie[] cookies=req.getCookies();
for(Cookie cookie:cookies){
resp.getWriter().write("Cookie["+cookie.getName()+"="+cookie.getValue()+"]<br/>");
}
3.2、获取某一个cookie的值
public class CookieUtils {
public static Cookie findCookie(String name,Cookie[] cookies){
if(name==null||cookies==null||cookies.length==0){
return null;
}
for(Cookie cookie:cookies){
if(name.equals(cookie.getName())){
return cookie;
}
}
return null;
}
}
4、Cookie值的修改
方案一:
1、创建一个新的Cookie对象(同名不同值)
2、通知客户端保存Cookie
//1、创建新的Cookie对象(同名不同值)
Cookie cookie1=new Cookie("key1","newValue1");
//2、通知客户端保存Cookie
resp.addCookie(cookie1);
resp.getWriter().write("新的cookie1已修改好");
方案二:
1、先查找需要修改的Cookie对象
2、调用setValue()方法赋予新的Cookie值
3、通知客户端保存Cookie
//1、查找需要修改的cookie对象
Cookie cookie=CookieUtils.findCookie("key2",req.getCookies());
//2、调用setValue()方法赋予新的cookie值
cookie.setValue("newValue2");
//3、通知客户端保存修改的cookie值
resp.addCookie(cookie);
注意:cookie的值不支持中文、空格、括号等,若需使用需加上BASE64编码操作
5、Coookie生命控制
含义:Cookie 什么时候被删除
setMaxAge()
正数:表示在指定秒数后过期
负数:默认值是-1,表示浏览器一关Cookie值就会被删除
0:马上删除
//1、创建cookie对象
Cookie cookie=new Cookie("key","value");
//2、调用setMaxAge()方法设置过期时间
cookie.setMaxAge(2000);
//3、通知客户端保存cookie
resp.addCookie(cookie);
6、Cookie有效路径Path的设置
Cookie的属性可以有效过滤Cookie哪些可以发送给服务器,哪些不发
CookieA path=/工程路径
CookieB path=/工程路径/abc
请求地址如下:
http://ip:port/工程路径/a.html
CookieA 发送
CookieB 不发送
http://ip:port/工程路径/abc/a.html
CookieA 发送
CookieB 发送
cookie.setPath("工程路径");
三、Session
1、session(会话)的含义
1.1、是一个接口
1.2、用来维护一个客户端与服务器之间关联的一种技术
1.3、每个客户都有自己的一个session会话
1.4、session会话中,我们常用来保存用户登录之后的信息
2、session的创建与获取
request.getSession(): 第一次调用是创建,之后调用是获取
getId(): 每个session都有唯一的id值
isNew(): 判断是不是刚创建的
//解决响应中文乱码问题
resp.setContentType("text/html;charset=UTF-8");
//创建和获取Session对象
HttpSession session = req.getSession();
//判断当前Session对话,是否是新建的
boolean isNew = session.isNew();
//获取session对话唯一的id值
String id = session.getId();
resp.getWriter().write("id值为:"+id+"<br/>");
resp.getWriter().write("是否新建+"+isNew);
3、Session域中数据的存取
req.getSession().setAttribute("key1","value1");
Object attribute = req.getSession().getAttribute("key1");
resp.getWriter().write("从Session域中获取key1的数据是"+attribute);
4、Session的生命周期
setMaxInactiveInterval(int interval):设置以秒为单位的过期时间,超过时间会被销毁
getMaxInactiveInterval(): 获取Session的超过时间
invaildate(): 让当前对话马上超时无效
Session 的默认时间是30分钟
生命周期的修改方法:
1、修改自己工程下的web.xml配置文件中的<session-timeout>属性值
2、修改某个session的时长,使用setMaxInactiveInterval(int interval)
HttpSession session = req.getSession();
session.setMaxInactiveInterval(3);
3、设置当前对话马上失效
HttpSession session = req.getSession();
session.invalidate();