zoukankan      html  css  js  c++  java
  • 会话技术cookie与session

    会话技术cookie

    会话技术

    ​ 什么是会话

    • 用户开一个浏览器
    • 点击多个超链接,访问服务器多个web资源
    • 然后关闭浏览器,整个过程称之为一个会话。
    • 和打电话一样,电话接收,开始会话,电话 挂断,结束会话

    ​ 会话技术解决什么问题

    • 保持各个客户端自己的数据
    • 每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,程序要想办法为每个用户保存这些数据

    服务器怎样把Cookie写 给客户端

    创建Cookie

    • Cookie cookie = new Cookie(String cookieName,String cookieValue);
    • cookie会以响应头的形式发送给客户端
    • Cookie只能存储非中文的字符串

    向客户端发送cookie

    ​ response.addCookie(cookie名称)

    访问

    • 第一次访问时, 请求头当中没有cookie, 响应当中会看到set-cookie
    • 再一次访问时, 请求头当中就能够看到cookie信息
    • 访问服务器的任何资源,一般情况下都会把cookie带去过

    Cookie默认存储时间

    默认cookie的会话级别

    • 打开浏览器,关闭浏览器为一次会话
    • 如果不设置持久化时间,cookie会存储在浏览器的内存中,浏览器关闭,cookie信息销毁

    设置Cookie在客户端的存储时间

    • cookie.setMaxAge(int seconds);
    • 设置的时间为秒
    • 如果设置持久化时间,cookie信息会被持久化到浏览器的磁盘文件里
    • 过期会自动删除

    设置Cookie的携带路径

    • 访问某一个资源时,要不要带cookie信息。资源携带太多,会影响传输速度

    • 如果不设置携带路径

    • 默认情况下会在访问创建cookie的web资源相同的路径,都携带cookie信息
      在myxq/CookieServlet下创建的cookie

    在myxq/下的index.jsp访问时会携带cookie

    不是在myxq下,不会携带cookie

    设置携带路径

    cookie.setPath(String path);

    • cookie.setPath(“/CookiePro/cookieServlet”);只有访问cookieServlet才携带cookie信息
    • cookie.setPath(“/CookiePro”);访问指定的工程时, 都会携带cookie信息
    • cookie.setPath(“/”);访问服务器下部署的所有工程时都会携带cookie

    删除Cookie

    • 如果想删除客户端的已经存储的cookie信息
    • 使用同名同路径的持久化时间为0的cookie进行覆盖即可

    服务器如何获取客户端携带的cookie

    • 通过Request对象的getCookies()方法
    • 获取的是所有的cookie
    • 要进行遍历,找出自己名称的那一个

    应用:记录上次登录时间

    ​ 需求
    ​ 访问时,显示上次的登录时间
    ​ 步骤
    ​ 1.第一次访问时,获取当前的时间,并把它写到cookie当中,响应给浏览器
    ​ 2.第一次访问,告诉用户是第一次访问
    ​ 3.用户下次访问时,获取用户携带的cookie,把日期在浏览器当中显示,记录最新的cookie

    session

    session简介

    • Session技术是将数据存储在服务器端的技术
    • 会为每个客户端都创建一块内存空间存储客户的数据
    • 客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内存空间
    • Session需要借助于Cookie存储客户的唯一性标识SESSIONID

    Session如何办到在一个servlet当中存数据,

    • 在别的servlet当中取出当初存储的数据
    • 每一个用户访问服务器时,会给该用户分配他自己对应的存储空间
    • 并且创建的存储空间有一个编号我们称为SessionID
    • 第一次访问时, 会把对应的sessionID以Cookie的形式写给浏览器
    • 下次再访问时, 会携带sessionID,找到当初创建的那个存储空间
    • 在对应的存储空间当中取出数据

    如何获取Session对象

    HttpSession session = request.getSession();
    获得专属于当前会话的Session对象
    如果服务器端没有该会话的Session对象,会创建一个新的Session返回
    如果已经有了属于该会话的Session直接将已有的Session返回
    本质就是根据SESSIONID判断该客户端是否在服务器上已经存在session了
    

    怎样向session当中存取数据

    ​ Session对象也是一个域对象

    • session.setAttribute(String name,Object obj);
    • session.getAttribute(String name);
    • session.removeAttribute(String name);

    session的生命周期

    ​ 创建
    ​ 第一次执行request.getSession()时创建
    ​ 销毁

    • 服务器关闭时
    • session过期/失效(默认30分钟)
    • 是从最后一次操作结束时计时
    • 手动销毁
    • session.invadate
    • 浏览器关闭,session就销毁,这句话是不正确的

    ​ 作用范围
    ​ 默认在一次会话中,一次会话中任何资源公用一个session对象

    JSessionID持久化

    • 默认情况下,第一次获取session对象时, 会帮你创建一个session,可以获取该Session的ID
    • 会自动的把id写到cookie当中,在cookie中Session的ID 下标是 JSessionID

    存在的问题

    • 第一次访问sevlet1时存储一些数据
    • 在第二个servlet当中直接取数据,可以直接取到
    • 把浏览器关闭
    • 直接到第二个servlet当中取数据,发现取不到数据了

    原因

    • 因为访问的时候要求带着JSessionID.
    • 由于默认情况下,存储cookie是会话级别的,关闭浏览器,就没有了。
    • 所以再次打开浏览器,访问资源时,没有JSessionID. 就会创建一个新的session. 就取不到数据了

    解决办法

    • 在写数据时,自己手动去把sessionID写到cookie当中
    • 写的时候,设置持久化时间
    • 注意,key值一定是和它自动生成的key值是一样的

  • 相关阅读:
    人生感悟经典名言大全
    Linux<DNS配置>
    CentOS7安装详细步骤
    8 个实用在线工具,破解工作学习中的80%难题!
    java.sql.SQLException: Access denied for user '@' localhost' (using password: NO)
    windows10系统激活的方法
    程序猿小哥哥教你们把自己网站变灰色,哀悼……
    常用正则表达式
    2020年Web前端最新框架技术
    Navicat Premium 15 永久激活版安装教程
  • 原文地址:https://www.cnblogs.com/mumuyinxin/p/10604200.html
Copyright © 2011-2022 走看看