一个网站怎么证明你来过?
1.首次访问时服务器给客户端一个cookie,下次客户端再次访问会自动携带cookie,注意cookie可以是多个
2.首次访问时服务器登记了客户端一系列信息,下次客户端再进行访问时服务器自动匹配此客户端是否访问过
cookie
一个网站的cookie是否存在上限?
答:一个web站点可给浏览器方式多个cookie,最多20个,cookie大小有限制是4kb,300个cookie是浏览器的上限
一个cookie是只能保存一个信息吗?
cookie的应用1:记录访问时间
public class CookieServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决中文乱码
resp.setHeader("Content-type","text/html;charset=utf-8");
PrintWriter w = resp.getWriter();
Cookie[] cookies = req.getCookies();//这里返回数组,可能存在多个cookie
if (cookies != null) {
//如果存在cookie
w.write("上一次访问时间是:");
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
if (cookie.getName().equals("lastlogintime")) {//某个cookie记录的是用户上次访问此网站的时间
//获得cookie中的值
long lastlogintime = Long.parseLong(cookie.getValue());
Date date = new Date(lastlogintime);
w.write(date.toLocaleString());
}
}
} else {
w.write("这是你第一次访问!");
}
Cookie cookie=new Cookie("lastlogintime",System.currentTimeMillis()+"");
cookie.setMaxAge(24*60*60);//cookie有效期:1min后失效
resp.addCookie(cookie);
}
}
运行结果:
cookie的应用2:传递含有中问字符的cookie
Session(重点)
session就是一个会话,一个用户通过浏览器刷b站,点了很多个超链接最后关闭浏览器这一过程就是一个会话。
session使用场景:保存用户登录信息,购物车信息,网站中用户经常用到的数据
服务器会给每一个浏览器 创建一个session对象,session有保存用户信息的功能,同时我们也可以向session存放信息
session应用1:向session中存东西和从session中获得东西
public class SessionDemo01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决中文乱码
resp.setHeader("Content-type","text/html;charset=utf-8");
PrintWriter w=resp.getWriter();
//获取session
HttpSession session=req.getSession();
//向session中存东西,因为用户访问了网页,所以就要登记信息
session.setAttribute("name",new Person("cl",1));
//通过session拿到用户id并打印
String sessionid=session.getId();
w.write(sessionid);
//判断session是否为新创建的
if(session.isNew()){
w.write("session创建成功!id是:"+sessionid);
}
else {resp.getWriter().write("session已经在服务端存在");
}
}}
session应用2:
我在session应用1代码中创建了一个person对象
这个语句:session.setAttribute("name",new Person("cl",1));
然后我可以在另一个session文件查询到session应用1这个person的信息
public class SessionDemo02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决中文乱码
resp.setHeader("Content-type","text/html;charset=utf-8");
HttpSession session=req.getSession();
Person person=(Person)session.getAttribute("name"); //通过session获取对象的属性值
System.out.println(person.toString());//在终端打印出
}
}
session应用3:移除session的某些属性和注销session
public class SessionDemo03 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session=req.getSession();
session.removeAttribute("name");//从session中移除属性
session.invalidate();//手动注销session
}
}
在web.xml文件中设置session的有效期
<!-- 可设置session失效时间,5min-->
<session-config>
<session-timeout>5</session-timeout>
</session-config>
小结:cookie和session的区别
cookie是用户数据写给浏览器,浏览器保存(多个)
session是把用户数据写到用户独占的session中,各个用户的信息互不干扰,服务器保存(只存储重要信息,防止资源浪费)