//获取session对象(获取或创建)
HttpSession session = req.getSession();
//会话标识符
System.out.println("会话标识符:"+session.getId());
System.out.println("会话的创建时间:"+session.getCreationTime());
System.out.println("会话的最后一次访问:"+session.getLastAccessedTime());
System.out.println("是否是新的对话:"+session.isNew());
Web三大概念:cookie,session,application
Session:记录一系列状态
Session与cookie功能效果相同。Session与Cookie的区别在于Session是记录在服务端的,而Cookie是记录在客户端的。
isNew():是否是新的Session,一般在第一次访问的时候出现
getid():拿到session,获取ID
getCreationTime():当前session创建的时间
getLastAccessedTime():最近的一次访问这个session的时间。
getRrquestedSessionid: 跟随上个网页cookies或者URL传过来的session
isRequestedSessionIdFromCookie():是否通过Cookies传过来的
isRequestedSessionIdFromURL():是否通过重写URL传过来的
isRequestedSessionIdValid():是不是有效的sessionID
session就是服务器里面的一块内存,内存里面能放任何东西,只要是名值对就可以了。
session里面的名字永远都是String类型
/设置session作用域
HttpSession session=req.getSession();
session.setAttribute("name","zhangsan");
//request作用域
req.setAttribute("name2","lisi");
//请求转发 sess03
req.getRequestDispatcher("sess03").forward(req,resp);
//重定向
resp.sendRedirect("sess03");
//获取session作用域
String name=(String)req.getSession().getAttribute("name");
System.out.println("Session"+name);
//获取request作用域
System.out.println("Request:"+req.getAttribute("name2"));
session的销毁
获取最大不活动时间
设置最大不活动时间
HttpSession session=req.getSession();
//获取最大不活动时间
int sec=session.getMaxInactiveInterval();
System.out.println("最大不活动时间:"+sec);
//设置最大不活动时间
session.setMaxInactiveInterval(15);
//手动销毁
session.invalidate();
ServiceContext 对象
Servlet的三大作用域
//1、通过request对象
ServletContext servletContext=req.getServletContext();
//2、通过session对象
ServletContext servletContext1=req.getServletContext();
//3、通过servletConfig对象
ServletContext servletContext2=getServletConfig().getServletContext();
// 4、在servlet类中直接获取
ServletContext servletContext3=getServletContext();
//常用方法
System.out.println("获取服务器的信息:"+servletContext.getServerInfo());
System.out.println("获取项目的真实路径:"+servletContext.getRealPath("/"));
cookie是Web服务器保存在客户端的一系列文本信息
cookie的作用:
1、对特定对象的追踪
2、实现各种个性化服务
3、简化登录
4、安全性能
5、容易泄露信息
什么是Cookie?
由于HTTP协议是无状态的,而服务器端的业务必须是要有状态的。Cookie诞生的最初目的是为了存储web中的状态信息,以方便服务器端使用。比如判断用户是否是第一次访问网站。
1、Cookie的创建和发送
创建:
Cookie cookie = new Cookie(name,value);
发送:
response.addCookie(cookie);
@WebServlet("/cook01")
public class Cook01 extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//创建Cookie对象(使用带参构造)
Cookie cookie=new Cookie("userName","admin");
//响应给浏览器
response.addCookie(cookie);
Cookie cookie02=new Cookie("userPwd","123456");
response.addCookie(cookie02);
}
}
2、Cookie的获取
获取的是所有的cookie 返回的是cookie数组
Cookie[] cookie=request.getCookies();
//获取cookie的值
Cookie[] cookies = request.getCookies();
//判断
if (cookies != null && cookies.length > 0) {
//遍历 得到每一个cookie的值
for (Cookie cookie : cookies) {
System.out.println("键:" + cookie.getName() + ",值:" + cookie.getValue());
//获取指定的cookie对象
if ("userName".equals(cookie.getName())) {
System.out.println("当前cookie的值为:" + cookie.getValue());
}
}
}
3、Cookie的失效时间
maxAge属性:默认值-1 表示浏览器关闭即失败
cookie.setMaxAge(正整数/负整数/零)
正整数:
表示存放到本地磁盘中,存活指定秒数
负整数:
表示在浏览器中存活,关闭浏览器就失效
零:
表示删除cookie,即即刻删除
Cookie中不能出现中文
有中文通过URLEncoder.encode()来进行编码
获取时通过URLDecoder.decoder()来进行编码
//创建Cookie对象
Cookie cookie=new Cookie("aa","AA");
//设置cookie的失效时间
// cookie.setMaxAge(-1);//关闭浏览器失效
//存活指定秒数
cookie.setMaxAge(20);
//响应cookie
response.addCookie(cookie);
//设置七天失效
Cookie cookie1 = new Cookie("name","zhangsan");
cookie1.setMaxAge(7*24*60*60);
response.addCookie(cookie1);
//maxAge设置为0,表示删除
Cookie cookie2=new Cookie("userPwd",null);
cookie2.setMaxAge(0);//设置为删除
response.addCookie(cookie);
4、Cookie的注意点:
Cookie 不跨浏览器 不跨电脑
Cookie中不能出现中文
有中文通过URLEncoder.encode()来进行编码
获取时通过URLDecoder.decoder()来进行编码
5、 Cookie的路径
cookie.setPath(“路径”); 设置可以访问cookie对象的路径
1、在当前项目中的资源可以访问(默认)
setPath("/s04");
2、在指定项目中的资源可以访问(只能在/s04项目下的资源能访问)
setPath("/s04");
3、在当前服务器中任意资源都可以访问(只要是在同一服务器下的资源)
setPath("/");
4、在指定项目下的指定资源可以访问
setPath("/s04/cook05");
注:只有访问的路径 包含cookie的path 才能获取
//在当前项目中的资源可以访问(默认)
Cookie cookie1=new Cookie("a1","A1");
cookie1.setPath("/s04"); //可以不设置 默认
response.addCookie(cookie1);
//在指定项目中的资源可以访问
Cookie cookie2=new Cookie("a2","A2");
response.addCookie(cookie2);
cookie2.setPath("/s05");
//在当前服务器中任意资源都可以访问 (只要是在同一服务器下的资源)
Cookie cookie3=new Cookie("a3","A3");
response.addCookie(cookie3);
cookie3.setPath("/");
//在指定项目下的指定资源可以访问
Cookie cookie4=new Cookie("a4","A4");
cookie4.setPath("/s04/cook02");
response.addCookie(cookie4);