Cookie(针对客户端)
一、基础知识:
1.概念:
Cookie 是服务器通知客户端保存键值对的一种技术。
客户端有了 Cookie 后,每次请求都发送给服务器。
每个 Cookie 的大小不能超过 4kb
2.Cookie生命控制
Cookie 的生命控制指的是如何管理 Cookie 什么时候被销毁(删除)
3.Cookie有效路径Path的设置:
Cookie的path属性可以有效的过滤哪些Cookie可以发送给服务器。哪些不发。
path属性是通过请求的地址来进行有效的过滤。
二、cookie实例
{
public class CookieServlet extends BaseServlet00 {
/**
* cookie的路径设置
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void pathCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
Cookie cookie = new Cookie("path1", "path1");
//getContextPath()->得到工程路径
cookie.setPath(req.getContextPath()+"/abc");//->/工程路径/abc
resp.addCookie(cookie);
resp.getWriter().write("创建了一个带有path路径的cookie");
}
/**
* cookie的生命控制
* setMaxAge()
* 正数,表示在指定的秒数后过期
* 负数,表示浏览器一关,Cookie 就会被删除(默认值是-1)
* 零,表示马上删除 Cookie
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void defaultLifeCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie cookie=new Cookie("defalutLife","defalutLife");
cookie.setMaxAge(-1);//设置存活时间
resp.addCookie(cookie);
}
/**
* 让cookie存活一段时间
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void keepLifeCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie cookie = new Cookie("life3600", "life3600");
cookie.setMaxAge(60*3);//设置cookie在3分钟后被删除。无效。
resp.addCookie(cookie);
resp.getWriter().write("已经创建了一个存活3分钟的cookie");
}
/**
* 马上删除cookie
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void defaultNowCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//找到目标cookie
Cookie cookie=cookieUtils.findCookis("key1",req.getCookies());
if(cookie!=null){
//设置setMaxAge(0)
cookie.setMaxAge(0);//马上删除
resp.addCookie(cookie);
resp.getWriter().write("key1的cookie已经被删除");
}
}
/**
* 修改cookie
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void updateCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// //法一
// //创建同名cookie对象
// //在构造,同时赋予新的Cookie值
// Cookie cookie = new Cookie("key1", "newValue1");
// //调用response.addCookie(cookie)通知客户端保存修改
// resp.addCookie(cookie);
// resp.getWriter().write("key1的Cookie已经修改好");
//方案二
//先找到需要修改的cookie对象
Cookie cookie = cookieUtils.findCookis("key2", req.getCookies());
if(cookie!=null){
//调用setValue()方法赋予新cookie值
cookie.setValue("newValue2");
//调用response.addCookie()通知客户端保存修改
resp.addCookie(cookie);
}
}
/**
* 获取cookie
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void getCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.获取cookie对象
final Cookie[] cookies = req.getCookies();
for (Cookie cookie : cookies) {
//getName()返回cookie的key(名)
//getValue()返回cookie的value(值)
resp.getWriter().write("Cookie["+cookie.getName()+"="+cookie.getValue()+"] <br>");
}
Cookie targetCookie= cookieUtils.findCookis("key1",cookies);
// for (Cookie cookie : cookies) {
// if("key2".equals(cookie.getName())){
// targetCookie=cookie;
// break;
// }
// }
// targetCookie如果不为0,则说明找到了需要的cookie
if(targetCookie!=null){
resp.getWriter().write("找到了需要的cookie");
}
// req.getCookies();
}
/**
* 创建cookie
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void creatCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.创建cookie对象
Cookie cookie = new Cookie("key1", "value1");
//2.通知客户端保存cookie
resp.addCookie(cookie);
//1.创建cookie对象
Cookie cookie1 = new Cookie("key2", "value2");
//2.通知客户端保存cookie
resp.addCookie(cookie1);
resp.getWriter().write("cookie创建成功");
}
}
Session(针对服务器端)
一、基础知识:
1、概念:
1、Session就一个接口(HttpSession)。
2、Session就是会话。它是用来维护一个客户端和服务器之间关联的一种技术。
3、每个客户端都有自己的一个Session会话。
4、Session会话中,我们经常用来保存用户登录之后的信息。
2.session的生命控制
session的生命控制指的是如何管理session什么时候被销毁(删除)
在tomcat中所有session默认的超时时长为30分钟,这是由tomcat服务器配置文件web.xml初始化配置的时间
若要改变单次会话session的超时时间可以在程序中调用:getMaxInactiveInterval()方法。
session超时指的是客户端两次请求的最大间隔时长
3.技术实现:
session技术底层是基于cookie技术实现的
二、session实例:
{
public class SessionServlet extends BaseServlet00 {
/**
* 设置session马上超时
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void deleteNow(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取session对象;
HttpSession session = req.getSession();
//让session会话马上超时
session.invalidate();
resp.getWriter().write("session已经设置为超时(无效)");
}
/**
* 设置session的超时时长,以3秒位例
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void defLifeTime(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取session对象;
HttpSession session = req.getSession();
//设置当前session在3秒后超时
session.setMaxInactiveInterval(3);
resp.getWriter().write("当前session已经设置为"+session.getMaxInactiveInterval()+"秒后超时");
}
/**
* session默认的生命时长
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void defaultLife(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取session默认的超时时长
int maxInactiveInterval = req.getSession().getMaxInactiveInterval();
resp.getWriter().write("session默认的超时时长为:"+maxInactiveInterval+"秒");
}
/**
* 向Session域中存储数据
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void setAttribute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.getSession().setAttribute("key1","value1");
resp.getWriter().write("已经向session中保存了数据");
}
/**
*向Session域中获取数据
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void getAttribute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Object attribute = req.getSession().getAttribute("key1");
resp.getWriter().write("从session中获取出key1的数据是"+attribute);
}
/**
* 创建或获取session会话
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void creatOrGetSession(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//创建和获取会话对象
HttpSession session = req.getSession();
//判断当前session会话,是否是新创建出来的
boolean isNew = session.isNew();
//获取session会话的唯一标识
String id = session.getId();
resp.getWriter().write("得到的session,它的id是:"+id+"<br>");
resp.getWriter().write("这个session是否是新创建的:"+isNew+"<br>");
}
}
}
以上是本篇小节,不喜勿喷,感谢理解