zoukankan      html  css  js  c++  java
  • cookie和session

    在说明cookie和session之前,先说明一下什么是状态管理

    1. 状态管理:将浏览器与web服务器之间多次交互当做一个整体来看待(即为了完成某个业务,需要多次交互,比如购物),并且将多次交互所涉及的数据(即状态)保存下来。
    2. 进行状态管理的方法
      • 客户端:利用cookie技术进行管理
      • 服务端:利用session技术进行管理

    什么是cookie

    服务器临时存放在浏览器的少量数据。

    服务端给客户端的数据,存储于客户端(浏览器)。由于是保存在客户端上的,所以存在安全问题,并且cookie是由个数和大小限制的(4kb),所以一般cookie用来存储一些比较小且安全性要求不高的数据,而且一般数据都会进行加密。

    cookie的工作原理

    浏览器访问服务器时,服务器讲义少量的数据以set-cookie消息头的方式发送给浏览器;浏览器会将这些数据临时保存下来,当浏览器再次访问服务器时,会将这些数据以cookie消息头的方式发送给服务器。

    常用方法

    • Cookie cookie = new Cookie("account",account); //保存账号数据

    • cookie.setMaxAge(1 * 60 * 60 * 24); //cookie存在在本地的有效时长(单位为秒)默认为-1 表示页面关闭cookie就失效

      注意:
      1.单位是秒
      2.当seconds>0,浏览器会将cookie保存在硬盘上,超过指定时间,浏览器会销毁该cookie
      3.当seconds<0,保存在内存里面(缺省值)
      4.当seconds=0,浏览器会立刻删除该cookie。
         比如:要删除一个名称为“cart”的cookie。
         Cookie c = new Cookie("cart","");
         c.setMaxAge(0);
         response.addCookie(c);
      
    • cookie.setDomain(""); //设置在某个域名下生效

    • cookie.setPath("/login.jsp"); //设置访问该域名下某个路径时生效

    • cookie.setMaxAge(0); //cookie中的account

    • response.addCookie(cookie); //添加到response

    • Cookie[] cookies=request.getCookies(); //获取cookies

    • cookie.getName(); //cookie的name

    • cookie.getValue(); //cookie的value

    cookie的编码问题

    cookie只能保存合法的ascii字符。中文显示不属于ascii字符,需要将中文进行编码处理。

    简单来说,就是讲中文转换成相应的ascii字符串的形式。

    cookie的路径问题

    1. 什么是cookie的路径问题

      浏览器访问服务器上的某个地址时,会比较该地址是否与cookie的路径匹配,只有匹配的cookie才会被发送。

      匹配规则:要访问的地址(路径)必须等于cookie的路径或者是其子路径。

    2. 默认路径

      默认路径等于添加该cookie的组建的路径。

      比如:/a/b/c.jsp添加了一个cookie,则该cookie默认的路径是“/a/b”

    3. 可以使用cookie.setPath(String path)方法来修改。

    cookie的缺点

    1. cookie是可以被用户禁止的。
    2. cookie只能保存少量的数据。(约4kb)
    3. 浏览器通常只允许保存几百个cookie
    4. cookie不安全,针对敏感数据,比如账号密码之类的东西,如需以cookie的方式保存在浏览器中,一定要加密。

    Session

    什么是session

    服务端为了保存状态而创建的一个特殊对象

    session的工作原理

    在浏览器访问服务器是,服务器会创建一个session对象(该对象有一个唯一的id,一般称之为sessionId),服务器会将这个sessionId以cookie的形式发送给浏览器,浏览器会保存下来,当浏览器再次访问服务器时,会将session以cookie的形式发送给服务器,服务器会依据sessionId找到对应的session对象。

    常用方法

    • request.getSession() //获取session对象
    • session.getID() //获取seesionId
    • session.getAttribute("key") //获取存储的某个值
    • session.setAttribute("key","value") //存储数据,value是object类型
    • session.getCreationTime() //获取session创建的时间
    • session.removeAttribute("key") //移除某个数据
    • session.invalidate() //重置session,使session是笑
    • session.setMaxInactiveInterval(1 * 60 * 60) //设置会话超时时间,默认30秒
    • session.getLastAccessedTime() //最后一次修改session的时间

    session和cookie的区别

    • cookie存在于客户端,session存在于服务器上
  • 相关阅读:
    用gethub下载ardupilot的最新源码
    Mavlink协议理解
    Mavlink消息包解析
    Mavlink 协议 理解
    极飞P20农业无人机多机协同作业飞行
    如何下载最新的固件到Pixhawk
    韦东山笔记之用busybox构建根文件系统
    Visual studio 打包程序时添加自定义的系统必备组件
    MFC 编译链接错误:unresolved external symbol
    在Visual studio 2017中使用EF6连接MySQL
  • 原文地址:https://www.cnblogs.com/Xiaoming0/p/14157779.html
Copyright © 2011-2022 走看看