cookie
客户端的技术,可以保存一定的信息
可以在servlet中写cookie对应的方法
cookie是一个类,可以通过固定的方法把信息存在cookie中,然后通过servlet的resp.addCookie 存入
通过 req.getcookie获取,
Cookie[] cookies = req.getCookies(); //获得Cookie 数组 cookie可能存在多个
cookie.getName(); //获得cookie中的key
cookie.getValue(); //获得cookie中的vlaue
new Cookie("lastLoginTime", System.currentTimeMillis()+""); //新建一个cookie
cookie.setMaxAge(24*60*60); //设置cookie的有效期
resp.addCookie(cookie); //响应给客户端一个cookie
public class ShowUserVisitsNum extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决中文乱码
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=utf-8");
//响应的输出
PrintWriter out = resp.getWriter();
//获得cookie
Cookie[] cookies = req.getCookies();
//设置输出的东西 写逻辑
if (cookies!=null){
out.write("上次访问的时间为");
//遍历cookie 因为cookie有很多,所以想要找到自己设置的那个cookie 需要遍历比对
for (Cookie cookie : cookies) {
if (cookie.getName().equals("lastLonginTime")){
//比对k之后通过这个k获得v,然后想办法输出value
String cookieValue = cookie.getValue();
//时间转换为长整型即为时间戳,时间戳通过Date类进行转换
Date date = new Date(Long.valueOf(cookieValue));
//输出这个Date 进行格式化
SimpleDateFormat stf = new SimpleDateFormat("YYYY-MM-dd hh:mm:ss");
//用formate方法变为字符串 新字符串时间格式为自己格式化的格式 常用类部分的知识
String format = stf.format(date);
out.write(format);
}
}
}else {
out.write("这是第一次访问");
}
//value设置为字符串类型的时间,如果想使用,需要把他变成时间戳,然后转换成时间
Cookie vistTime = new Cookie("lastLonginTime", String.valueOf(System.currentTimeMillis()));
resp.addCookie(vistTime);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
session重点
服务器会给每一次会话创建一个会议对象,session中,用户并不能直接获取信息,session的信息存储在服务器,并且没有用的数据库的技术。可以手动的清除session,也可以在web。xml里面指定失效的时间,session的简单使用方法如下:
一。在session中存储数据,以及判断session的id,什么时候创建session,一般在首次访问的时候,session会被浏览器自动创建,手动消除或者过期后,再次访问,再自动创建。
public class sessionDemo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
//获得session
HttpSession session = req.getSession();
//session中放入东西的方法,存入一个放入东西的名子,后面能放实体类,寻找时,需要通过名字寻找,kv键值对
session.setAttribute("name",new person("wpx",15));
//获得session的id,然后操作
String sessionId = session.getId();
if(session.isNew()){
resp.getWriter().write("session创建成功,sessionID"+sessionId);
}else {
resp.getWriter().write("session存在,sessionID"+sessionId);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
二,调用session中的数据,并且可以对数据进行前端或者后端的操作。
public class sessinDemo01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//跨类操作session的数据,因为session中的信息都是保存在服务器的,用户的客户端只是在cookie中存入session的id,
HttpSession session = req.getSession();
//通过getattr的方法通过存入的名字,获得了存入的数据
person p = (person)session.getAttribute("name");
//接下来可以对这个进行操作
System.out.println(p.toString());
}
三。手动消除session、消除数据
public class sessionDemo02 extends HttpServlet {
//清除session
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获得session信息
HttpSession session = req.getSession();
//通过定义的名字删除数据
session.removeAttribute("name");
//消除session,消除后,进入时会自动创建session,然后session的id会不一样。
session.invalidate();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
四、自动消除,设置过期时间,需要在web。xml里面设置
<session-config>
<!-- 以分钟为计时单位,一般只设置几个小时,太长会浪费服务器资源-->
<session-timeout>15</session-timeout>
</session-config>
服务器技术、可以保存用户的的会话信息