Cookie、Session

Cookie:服务端生成Cookie发给客户端用于认证

Session:服务端进行进行登记,每人有不同的Session

session与cookie的区别

Cookie:当用户打开浏览器访问网站,服务器端会生成一个cookie发给客户端,客户端访问网站就会携带cookie

Session:客户端请求服务端,服务端会生成一个sessionid,每个用户唯一,用类似于发给客户端cookie的方式发给客户端这个sessionid,用sessionid来辨别这次请求是那个客户端发来的。而在服务器端保存的session会存入很多东西,也是根据sessionid来辨别这些session中的内容是哪个用户的。

  • cookie是将用户的数据写给用户的浏览器,用浏览器保存,可保存多个cookie
  • session是将用户的数据,写给用户的session,服务器端保存,不建议保存太多
  • session由服务器创建

cookie

一个web站点可以发多个cookie

常用方法

Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis() + ""); //新建一个cookie
resp.addCookie(cookie); //响应给客户端cookie
Cookie[] cookies = req.getCookies(); //获得cookie数组
cookie.setMaxAge(24*60*60); //设置cookie有效期
cookie.getName() //获得cookie名字
cookie.getValue() //获得cookie的值

服务端发送给客户端cookie

//服务端发给客户端cookie
Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis() + "");
resp.addCookie(cookie);

服务端获取客户端带来的cookie

//服务器端从客户端获取cookie
Cookie[] cookies = req.getCookies(); //这里返回数组,可能存在多个cookie

设置cookie有效期,以秒为单位

cookie.setMaxAge(24*60*60);

例子:保存cookie上一次访问的时间

public class CookieDemo01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
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 cookie = cookies[i];
//获取cookie中的名字
if (cookie.getName().equals("lastLoginTime")){
//获取cookie中的值
long lastLoginTime = Long.parseLong(cookie.getValue());
Date date = new Date(lastLoginTime);
out.write(date.toLocaleString());
}
} }else {
out.write("第一次访问"); } //服务端发给客户端cookie
Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis() + "");
resp.addCookie(cookie); } @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { }
}

删除cookie

不设置有效期,关闭浏览器自动失效

设置cookie有效期为0

创建一个cookie,名字必须和要删除的cookie名字一致

public class CookieDemo02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie lastLoginTime = new Cookie("lastLoginTime", System.currentTimeMillis() + ""); //设置有效期为0
lastLoginTime.setMaxAge(0);
resp.addCookie(lastLoginTime);
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { }
}

URL编解码

URLEncoder.encode("str", "utf-8");			//str进行URL编码
URLDecoder.decode("str", "utf-8"); //str进行URL解码

session

session在浏览器一打开就存在了,会类似于发送给客户端cookie一样。但这只是SessionID的操作,Session还可以设置其他的属性。

之前Servlet文章有提过,Servlet之间本身是无法通信,例如分享数据的。但是可以通过ServletContext上下文实现,其实在Session中通过Attribute也可以实现Servlet之间的通信的。

Cookie cookie = new Cookie("JSESSIONID", sessionId);
resp.addCookie(cookie);

常用方法

方法 作用
req.getSession() 获得一个session
session.setAttribute("name", "Zh1z3ven") 设置属性,value部分可以是一个对象
session.getAttribute("name") 获取属性
session.removeAttribute("name"); 删除属性
session.invalidate(); 注销session
session.getId() 获取sessionid
session.isNew() 判断是否为新创建的session

例子:创建session,获取sessionid,设置session属性

public class SessionDemo01 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"); //得到session
HttpSession session = req.getSession(); //设置session属性
session.setAttribute("name", "Zh1z3ven");
//获取sessionid
String sessionId = session.getId(); //判断是否为新创建的session
boolean aNew = session.isNew();
if (aNew){
resp.getWriter().write("session创建成功,sessionID为:" + sessionId);
}else {
resp.getWriter().write("session已经在服务器中存在, SessionID为:" + sessionId);
} } @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}

获取sessin属性,新建一个person类

public class Person {
private String name;
private int age; public Person() {
} public Person(String name, int age) {
this.name = name;
this.age = age;
} public void setName(String name) {
this.name = name;
} public void setAge(int age) {
this.age = age;
} public String getName() {
return name;
} public int getAge() {
return age;
} @Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}

修改前面demo中设置属性值的语句

session.setAttribute("name", new Person("Zh1z3ven", 18));

获取session属性中的person对象

public class SessionDemo02 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"); //得到session
HttpSession session = req.getSession(); //获取Session信息
Person name = (Person) session.getAttribute("name");
System.out.println(name);
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { }
}

这里就实现了不同的Servlet之间数据共享。

注销Session

删除属性,注销session。但是注销了会马上生成一个新的session

HttpSession session = req.getSession();
session.removeAttribute("name");
session.invalidate();

也可以在web.xml设置session过期时间

<!--    设置session配置-->
<session-config>
<!-- 设置session过期时间,以分钟为单位-->
<session-timeout>2</session-timeout>
</session-config>

Java之Cookie与Session的更多相关文章

  1. Java学习--Cookie 和session

  2. java的会话管理:Cookie和Session

    java的会话管理:Cookie和Session 1.什么是会话 此处的是指客户端(浏览器)和服务端之间的数据传输.例如用户登录,购物车等 会话管理就是管理浏览器客户端和服务端之间会话过程产生的会话数 ...

  3. Java cookie和session介绍与区别

    一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于才服务器端保持状态的 ...

  4. Java——Cookie与Session

    Cookie通过客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份. 1.Cookie  1.1概念及使用方法 Cookie实际上是一小段文本信息.客户端请求服务器,如果服务 ...

  5. Java Cookie和Session(转载)

    一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于才服务器端保持状态的 ...

  6. Java Web(三) 会话机制,Cookie和Session详解

    很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二净,原因可能是没能好好理解这两种会话机制,所以会一直遗忘,一直重新回过头来学习它,今天好好把他总 ...

  7. Java Cookie和Session

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  8. cookie、session和java过滤器

    基础知识理解: cookie.session和过滤器通常都是用在web应用中,cookie和session用来保存一定的数据,过滤器Filter则是在浏览器发出请求之后,而后台执行特定的请求之前发生一 ...

  9. Java Web之Cookie、Session

    讲Cookie和Seesion之前,先讲一下HTTP连接其实是无序的,服务器不知道是谁在访问它.现在我们来实现一个简单的邮箱功能. 要求: 1.登录页面登录之后看到收件箱和欢迎我 2.点击收件箱看到几 ...

随机推荐

  1. 苦B程序员的数据验证之路

    发生了什么事 在一次苦B程序员和苦C程序员的结对编程中发生的一段对话 代码是这样的: public void deleteAllExtendAclsFromContent(String content ...

  2. Hibernate框架(四)缓存策略+lazy

    Hibernate作为和数据库数据打交道的框架,自然会设计到操作数据的效率问题,而对于一些频繁操作的数据,缓存策略就是提高其性能一种重要手段,而Hibernate框架是支持缓存的,而且支持一级和二级两 ...

  3. XCTF csaw2013reversing2

    题目描述:听说运行就能拿到Flag,不过菜鸡运行的结果不知道为什么是乱码 一.先运行看看. 果然乱码. 二.查壳 三.是pe文件,可以拖入od和ida进行动态和静态分析. 1.对主函数进行反编译一下. ...

  4. 第二章 python基本语法元素

    python有两种编程方式,交互式和文件式. 交互式:对每个输入语句即时运行结果------适合语法练习 文件式:批量执行一组语句并运行结果------编程的主要方式 实例1:圆面积的计算(根据半径r ...

  5. NB-IoT物联网连接

    一.NB-1oT的专有能力物联网(Internet of Things).简称IoTNB-IoT就是指窄带物联网(Narrow Band-Internet of Things)技术目前关于NB-IoT ...

  6. SpringMVC架构(一)

    SpringMVC架构 1.1Spring web mvc介绍 Spring web mvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来 ...

  7. HTML5-CSS(四)

    一.CSS3 渐变效果 (1)CSS3 提供了 linear-gradient 属性实现背景颜色的渐变功能.首先,我们先看一下它的样式表,如下: //两个必须参数background-image: l ...

  8. Vue中Object和Array数据变化侦测原理

    在学完Vue.js框架,完成了一个SPA项目后,一直想抽时间找本讲解Vue.js内部实现原理的书来看看,经过多方打听之后,我最后选择了<深入浅出Vue.js>这本书.然而惭愧的是,这本书已 ...

  9. synchronized锁定类方法、volatile关键字及其他(八)

    同步静态方法 synchronized还可以应用在静态方法上,如果这么写,则代表的是对当前.java文件对应的Class类加锁.看一下例子,注意一下printC()并不是一个静态方法: public ...

  10. Python实用案例,Python脚本,Python实现批量加水印

    往期回顾 Python实现自动监测Github项目并打开网页 Python实现文件自动归类 Python实现帮你选择双色球号码 Python实现每日更换"必应图片"为"桌 ...