Cookie&Seesion
Seesion (会话):用户打开浏览器,点击网页,访问web资源,关闭浏览器的过程
有状态的会话:带Cookie的访问
Cookie讲解
客户端技术 ->响应、请求
从请求中拿到Cookie信息
服务器响应给客户端
相关方法
public Cookie(String name, String value) //构方
Cookie[] getCookies() //获取Cookie
getName //获取cookie的key
getValue //获取cookie的value
setMaxAge(int expiry) //设置cookie的有效期
eg:
获取上一次访问的时间
class
//获取上一次访问的时间
public class ServletDemo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//处理中文乱码
resp.setContentType("text/html");
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
PrintWriter out = resp.getWriter();
//服务端 从客户端获取Cookie
Cookie[] cookies = req.getCookies(); //此处返回数组,则说明Cookie可能存在多个
//判断Cookie是否存在
if (cookies != null){
out.write("上一次访问的时间为:");
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
//获取Cookie名 并进行判断
if (cookie.getName().equals("lastTime")){
long l = Long.parseLong(cookie.getValue());
Date date = new Date(l);
out.write(date.toLocaleString());
}
}
}else {
out.write("第一次访问");
}
//服务器为客户端响应Cookie
Cookie cookie = new Cookie("lastTime", System.currentTimeMillis() + "");
//设置Cookie的有效期
cookie.setMaxAge(24*60*60);
resp.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
web.xml
<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">
<servlet>
<servlet-name>cookieDemo</servlet-name>
<servlet-class>com.rz.servlet.ServletDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cookieDemo</servlet-name>
<url-pattern>/cookie</url-pattern>
</servlet-mapping>
</web-app>
Session
服务器技术->将信息和数据存在于Seeion中
服务器将会为每一个用户(浏览器)创建Session。只要浏览器未关闭,则Session便存在。
eg:B站登陆时,若你选择记住我后。再次登陆时,B站自动登录你的账号。
class
/*
Session创建时,过程:
resp.addCookie(new Cookie("JSESSIONID",sessionId);
*/
public class ServletDemo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//处理中文乱码
resp.setContentType("text/html;charset=utf-8");
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
//得到Session
HttpSession session = req.getSession();
//给Session中存东西
session.setAttribute("name","Tom");
//获取id
String id = session.getId();
//判断该Seesion是否为新的
if (session.isNew()){
resp.getWriter().write("session创建成功 "+id);
}else {
resp.getWriter().write("session已存在 "+id);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
web.xml
<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">
<servlet>
<servlet-name>sessionDemo</servlet-name>
<servlet-class>com.rz.servlet.ServletDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>sessionDemo</servlet-name>
<url-pattern>/session</url-pattern>
</servlet-mapping>
</web-app>
session和cookie的区别
Cookie是把用户的数据写给用户的浏览器,由浏览器保存
Seesion把用户的数据写到用户独占的Session中,服务端保存(保存重要信息,减少服务器资源的浪费)
Session对象由服务器创建