Java--javaweb的cookie和session的区别和代码实例
一、cookie和session
1. cookie
1.1.cookie的作用
cookies是客户端请求浏览器携带的一个信息,相当于门票一样。
一个浏览器的cookies是否有上线
1.一个cookies只能保存一个信息
2.一个web站点可以给一个浏览器发送多个cookies,最多存放20个cookies
3.cookies的大小有限制4kb
4.浏览器上限300个cookies
cookie的有效期设置:
1.不设置有效期,关闭浏览器,自动失效
2.设置浏览器的cookies 的有效期为0
1.服务器会给一个用户创建一个Session
2.一个Seesion独占一个浏览器,只要浏览器没有关闭,则这个Seesion会一直存在
3.用户登录之后,整个网站它都可以访问,保存用户的信息
1.2.实例代码
package com.zhenwe.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
//保存用户上一次保存的时间
public class ServeletCookieSession extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//服务器把客户端访问就保存为一个cookie
//解决乱码问题
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
//获取一个输出的实例
PrintWriter out=resp.getWriter();
//从客户端请求获取cookies
Cookie[] cookies=req.getCookies();//从这里获取数组,说明cookies可能有多个
//判断Cookies是否存在
if (cookies!=null){
out.print("你上次访问的时间为:");
//访问时携带cookies与浏览器存在的cookie进行比对
for (int i = 0; i < cookies.length; i++) {
Cookie cookie=cookies[i];
if (cookie.getName().equals("lastLoginTime")){
//如果存在cookies,则获取cookies中的key 值,将获取的key值转换为时间类型显示
long lastLoginTime=Long.parseLong(cookie.getValue());
Date date=new Date(lastLoginTime);
//输出时间类型展示
out.print(date.toLocaleString());
}
}
}else{
out.print("这是您第一次访问");
}
//服务端从客户端响应一个cookies
Cookie cookie=new Cookie("lastLoginTime",System.currentTimeMillis()+"");
resp.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
程序在运行过程中调用的方法
1.Cookie[] cookies=req.getCookies();//获取请求中所有的cookies
2.cookie.getName()//获取cookies的key
3.cookie.getValue()//获取cookies的值
4.Cookie cookie=new Cookie(“lastLoginTime”,System.currentTimeMillis()+"");//新建一个cookies,存放key值
5.cookie.setMaxAge(246060);//设置cookie的有效期,这里单位为分钟
6.resp.addCookie(cookie);//响应给客户端一个cookies
2.session
2.1.含义
session 是由服务器自己创建,用来标识体的用户,这个机制相当于购物车,记录客户端访问的记录信息,一个用户整个网站中经常会使用的数据,都会保存在session中,当客户再次访问服务器时,可以使用这个session,避免资源的浪费。
设置session的有效期方法:
1.手动注销(比较高效)
HttpSession session=req.getSession();
session.removeAttribute(“name”);
//手动注销session
session.invalidate();
2.在web.xml中 设置session的过期时间
<session-config>
<!--15分钟后session自动失效-->
<session-timeout>1</session-timeout>
</session-config>
<description>
2.2.实例代码
package com.zhenwei.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;
public class SessionDemio extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决乱码问题
resp.setCharacterEncoding("utf-8");
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
//从请求中得到Seesion
HttpSession Session=req.getSession();
//给Session中存东西
Session.setAttribute("name","振威");
//获取Session的key值
String SessionID=Session.getId();
//判断Session是否创建成功
if (Session.isNew()){
resp.getWriter().write("Session已经创建成功,ID"+SessionID);
}
else resp.getWriter().write("Session未创建成功,ID");
//session在创建的时候做了什么事
Cookie cookie=new Cookie("HGFIKJ",SessionID);
resp.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}