cookie
- cookie存的数据类型有限:字符串形式的键值对,浏览器中可以保存多个cookie(一般保存在本地,浏览器保存的cookie个数是有限的大概300个)
代码
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置请求和响应编码
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
PrintWriter writer = resp.getWriter();
//从浏览器客户端获取cookie
Cookie[] cookies = req.getCookies();
if(cookies !=null) {
for (Cookie cookie : cookies) {
//获取cookie的name
String name = cookie.getName();
if (name.equals("lastAccessTime")) {
//获取cookie的value
String value = cookie.getValue();
Date date = new Date(Long.parseLong(value));
writer.println("last access time is"+ date.toLocaleString());
}
}
}else{
writer.write("第一次访问本站");
}
//获取系统当前时间覆盖cookie的值
resp.addCookie(new Cookie("lastAccessTime", System.currentTimeMillis()+""));
可以在浏览器中看到请求和响应中设置的cookie信息
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lPWlS5gy-1627484323651)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210710230339471.png)]
在application中可以查看或删除cookie
- 可以设置cookie的有效期即浏览器保存cookie的时间,过了设置的时间cookie会被删除
//设置cookie有效期时间(单位:秒)如果设置成0,表示删除这个cookie
cookie.setMaxAge(1*60);//设置成1分钟,1分钟后刷新页面,前面存的cookie会被删掉
在响应头中可以看到我们设置cookie的有效期
-
删除cookie
-
不设置有效期,关闭浏览器,就会删除cookie
-
将有效期设置成0
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //设置要和删除的cookie的name一致(会覆盖原有的cookie) Cookie cookie = new Cookie("lastAccessTime", System.currentTimeMillis() + ""); //将有效期设置成0 cookie.setMaxAge(0); resp.addCookie(cookie); }
-
session
- 服务器会给每个用户(浏览器)创建一个session
- 只要浏览器没关闭,这个session就一直存在,保存在服务器中
- session可以存复杂的数据
- 一旦注销session后,只要浏览器访问服务端又会生成新的session
**代码 **
1.获取session并设置属性
@WebServlet("/sessionDemo1")
public class SessionDemo1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter writer = resp.getWriter();
//获取session
HttpSession session = req.getSession();
//判断是否是新创建的session
if (session.isNew()) {
writer.write("session create success ID is " + session.getId());
} else {
writer.write("session was exist ID is " + session.getId());
}
//session可以保存对象
session.setAttribute("user", new User(1, "ld", 23));
//
// session.setMaxInactiveInterval(10*60);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
User对象
public class User {
private int id;
private String name;
private int age;
public User(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
2.再另一个Servlet中可以获取session和属性值
@WebServlet("/sessionDemo2")
public class SessionDemo2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();
//获取设置的属性值
User user = (User) session.getAttribute("user");
resp.setCharacterEncoding("utf-8");
System.out.println(user);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
-
删除session(再次请求会重新创建一个session)(使用手动删除,设置自动删除(在web.xml进行配置))
-
手动删除
@WebServlet("/sessionDemo3") public class SessionDemo3 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { HttpSession session = req.getSession(); //注销session session.removeAttribute("user"); session.invalidate(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
-
设置自动删除(在web.xml进行配置)
<session-config> <!-- 配置session的默认生效时间,单位:分钟--> <!-- 2分钟后session失效--> <session-timeout>2</session-timeout> </session-config>
-
session和cookie的区别
- cookie是服务器将用户数据(字符串键值对)发给浏览器由浏览器保存,浏览器可以保存多个cookie
- session是服务器将用户数据保存到由服务器创建的独立session中,由服务器保存。
- 因此经常使用的数据保存在session中
timeout>2
```
session和cookie的区别
- cookie是服务器将用户数据(字符串键值对)发给浏览器由浏览器保存,浏览器可以保存多个cookie
- session是服务器将用户数据保存到由服务器创建的独立session中,由服务器保存。
- 因此经常使用的数据保存在session中