会话:
        
用户打开一个浏览器 点击了很多超链接 访问多个web资源 关闭浏览器 这个过程称之为会话

有状态会话:一个同学来过教室 下次再来教室 我们会知道这个同学曾经来过
        一个网站 怎么证明你来过?
                客户端        服务端

                        1.服务端给客户端一个信件 客户端下次访问服务端带上信件就可以了  cookie
                        2.服务器登记你来过了 下次你来的时候我来匹配你 session

保存会话的两种技术
·cookie
        客户端技术(响应、请求)
        Cookie 一般用来保存用户信息
 比如 ① 我们在 Cookie 中保存已经登录过的用户信息,下次访问网站的时候页面可以自动帮你把登录的一些基本信息给填了;② 一般的网站都会有保持登录,也就是说下次你再访问网站的时候就不需要重新登录了,这是因为用户登录的时候我们可以存放了一个 Token 在 Cookie 中,下次登录的时候只需要根据 Token 值来查找用户即可(为了安全考虑,重新登录一般要将 Token 重写);③ 登录一次网站后访问网站其他页面不需要重新登录。

·session
        服务器技术,利用这个技术可以保存用户的会话信息 我们可以把信息或数据放在Session中
        Session 的主要作用就是通过服务端记录用户的状态。
 典型的场景是购物车,当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,因为 HTTP 协议是无状态的。服务端给特定的用户创建特定的 Session 之后就可以标识这个用户并且跟踪这个用户了。在整个网站中经常会使用的数据 我们将它保存在Se's'si

Cookie 数据保存在客户端(浏览器端),Session 数据保存在服务器端。

Cookie 存储在客户端中,而 Session 存储在服务器上,相对来说 Session 安全性更高。如果要在 Cookie 中存储一些敏感信息,不要直接写入 Cookie 中,最好能将 Cookie 信息加密,然后使用到的时候再去服务器端解密。

Cookie是把用户的数据写给用户的浏览器 浏览器保存(可以存多个)
       Session把用户的数据写到用户独占Session中 服务器端保存(保存重要信息 减少服务器资源的浪费) 其对象(session对象)由服务器创建

Cookie
        ①从请求中拿到cookie信息
        ②服务器响应给客户端cookie

Cookie[] cookies = req.getCookies();//获得Cookie
cookie.getName();//获得cookie中的key
cookie.getValue();//获得cookie中的value
new Cookie("shijian", System.currentTimeMillis()+"");//新建一个cookie
cookie.setMaxAge(24*60*60);//设置cookie有效期
resp.addCookie(cookie);//响应给客户端一个cookie
cookie一般会保存在本地的用户目录下 appdata一个网站Cookie是否存在上限?·一个cookie只能保存一个信息·一个web站点可以给浏览器发送多个cookie 最多存放20个cookie·cookie大小有限制 大概为4kb·浏览器的上限是300个cookie

删除cookie
        ·不设置有效期 关闭浏览器 自动失效
        ·设置有效期时间为0

代码:

package com.kero.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 CookieDemo1 extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}@Overrideprotected 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 = cookies[i];//获取cookie的名字boolean name = cookie.getName().equals("shijian");if(name){long l = Long.parseLong(cookie.getValue());Date date = new Date(l);out.write(date.toString());}}}else{out.write("这是您第一次访问本站");}//服务器给客户端相应一个cookieCookie cookie = new Cookie("shijian", System.currentTimeMillis()+"");cookie.setMaxAge(24*60*60);resp.addCookie(cookie);}
}

//删除cookie

package com.kero.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 CookieDemo2 extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//创建一个cookie 名字必须和要删除的名字一致Cookie cookie = new Cookie("shijian",System.currentTimeMillis()+"");//将cookie有效期设置为0cookie.setMaxAge(0);resp.addCookie(cookie);}
}

Session
        ·
服务器会给每一个用户(浏览器) 创建一个session对象
        ·一个session独占一个浏览器 只要浏览器没有关闭 这个session就存在
        ·用户登录之后 整个网站它都可以访问--->保存用户信息、保存购物车信息....

代码:

package com.kero.servlet;import com.kero.pojo.Person.Person;import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;public class SessionDemo1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("utf-8");resp.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");//得到SessionHttpSession session = req.getSession();//给Session中存东西session.setAttribute("name",new Person("张柯",20));//获取session的idString id = session.getId();//判断session是不是新创建的if(session.isNew()){resp.getWriter().write("session创建成功,ID:"+id);}else{resp.getWriter().write("session已经存在,ID:"+id);}
//        //Session创建的时候做了什么事情
//        Cookie cookie = new Cookie("JSESSIONID", id);
//        resp.addCookie(cookie);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req,resp);}
}

// 得到session

package com.kero.servlet;import com.kero.pojo.Person.Person;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;public class SessionDemo2 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("utf-8");resp.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");//得到SessionHttpSession session = req.getSession();Object name = (Person)session.getAttribute("name");System.out.println(name);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req,resp);}
}

//手动注销session

package com.kero.servlet;import com.kero.pojo.Person.Person;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;public class SessionDemo2 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//得到SessionHttpSession session = req.getSession();session.removeAttribute("name");session.invalidate();}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req,resp);}
}

//自动注销session(会话自动过期) 在web.xml文件中配置文件 以分钟为单位

<session-config><session-timeout>1</session-timeout>
</session-config>

        
        

Cookie和Session相关推荐

  1. 你想了解的Cookie和Session就在这~

    目录 1.会话的概念 2.保存会话的两种技术 3.Cookie 4.Session(重点) 1.会话的概念 我们知道session的意思就是会话,Cookie和Session 是两种会话技术,我们首先 ...

  2. Cookie和Session的区别与联系

    Cookie和Session Session 会话的理解 Session的作用 HTTP协议的无状态特点 Session的实现原理(重点) Session常用方法: Cookie 基本介绍 经典案例 ...

  3. 前端页面——Cookie与Session有什么区别

    我们在实际生活中总会遇到这样的事情,我们一旦登录(首次输入用户名和密码)某个网站之后,当我们再次访问的时候(只要不关闭浏览器),无需再次登录.而当我们在这个网站浏览一段时间后,它会产生我们浏览的记录, ...

  4. cookie、session总结

    前几天在调试第三方支付接口时碰到一个session失效问题,用了几天时间才搞明白,现在回想一下,主要还是由于cookie和session这一块的一些基本概念没有搞清楚,现总结一下. 浏览器使用HTTP ...

  5. cookie 和session 的区别详解

    转自 https://www.cnblogs.com/shiyangxt/archive/2008/10/07/1305506.html 这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者 ...

  6. web存储中cookie、session区别

    http协议是一种无状态的协议,浏览器对服务器的每一次请求都是独立的.为了使得web能够产生一些动态信息,就需要保存"状态",而cookie和session机制就是为了解决http ...

  7. cookie和session的代码实现

    cookie和session的代码实现 1.设置cookie 今天笔试题考的是cookie的设置,我竟然选了request也可以设置cookie,我的天呀. 我们来看如何在response设置吧 pu ...

  8. 还分不清 Cookie、Session、Token、JWT?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 转自:掘金   作者:秋天不落叶 juejin.im/po ...

  9. Token ,Cookie、Session傻傻分不清楚?

    点击上方蓝色"视学算法",选择"设为星标" 作者 | 王菜鸟1993 来源 | cnblogs.com/JamesWang1993/p/8593494.html ...

  10. Flask之Cookie与Session

    Cookie与Session 1 Cookie 设置 from flask import Flask, make_responseapp = Flask(__name__)@app.route('/c ...

最新文章

  1. Python 函数合集:足足 68 个内置函数请收好
  2. tengine 调用php,nginx 或tengine 访问日志分割处理
  3. c语言socket原理,Socket底层原理
  4. Go 语言 cannot find module providing package github.com/
  5. 华为程序员面试要改:网上编程 90 分钟,现场编程 30 分钟
  6. 详解MOS管、IGBT管,不看就亏大了!
  7. 图论——P问题、NP问题、NPC问题、NP-hard问题
  8. java面试_数据库
  9. Flex之使用DragManager实现对象拖动
  10. 可靠的Windows版Redis
  11. python数据分析之(1)数据输入和输出
  12. 【保证能用】Ubuntu创建一个正常权限的用户
  13. 综合布线干线子系统设计原则
  14. 苹果又开了一个“坏头”
  15. java 实现扑克牌洗牌功能
  16. R5 4650G和R5 5600G差距
  17. 什么是web前端?前端可以做什么?html5有什么用?
  18. 在WINDOWS运行框中能够输入的命令有多少?(转)
  19. Follow your heart (189)---那些正话反说,反话正说的方向
  20. 如何提高本地文件上传至百度云的速度_【软件推荐】满速下载软件,说出来你可能不信最高速度达到150m/s...

热门文章

  1. Python中文字符串,变成英文字符串
  2. php+redis+保存多个值,php向redis list一次性lPush多个值
  3. 用SPSS做数据分析时遇到的几个小问题——解决方法!
  4. postman常用断言
  5. wim工具扫描linux磁盘,图文解说WIMTOOL的安装及利用该工具编辑WIM文件
  6. python apkg,Python 自动加固APK
  7. Android数字时钟神一般的实现——TextClock
  8. Campass + Scss ,让我们更优雅的编写CSS
  9. 谷歌Android UI设计技巧
  10. python调用有道翻译_Python通过调用有道翻译api实现翻译功能示例