zoukankan      html  css  js  c++  java
  • 会话控制技术

    为什么要使用会话控制技术?

      因为HTTP是无状态协议,它不对之前的发生过的请求和响应的状态进行管理。也就是说HTTP没有一个内建的机制来维护两个事务之间的状态。当一个用户完成一个请求发起第二个请求的时候,服务器无法知道这次请求是来自于上一次的客户。而用户登录、购物车等,这些是需要服务器能够保存用户的状态的。会话技术就是用来完成这件事的。其思想是允许服务器跟踪客户端做出的连续请求。不可否认,无状态协议当然也有它的优点。由于不必保存状态,自然可减少服务器的CPU及内存资源的消耗。从另一方面来说,也正是因为HTTP协议本身是非常简单的,所以才会被应用在各个场景里。

    会话控制技术的实现方式

      一、通过GET参数传递

        在get里面把状态传递到下一页;使用get参数传递不安全而且不稳定,不建议使用

      二、cookie

        Cookie本质上是服务器发送给客户端的片段信息,存储在客户端浏览器的内存或者是硬盘中的技术。

        发送cookie:

          语法:setcookie(name,value,expire,path,domain,secure)  
    参数描述
    name 必需。规定 cookie 的名称。
    value 必需。规定 cookie 的值。
    expire 可选。规定 cookie 的有效期。
    path 可选。规定 cookie 的服务器路径。
    domain 可选。规定 cookie 的域名。
    secure 可选。规定是否通过安全的 HTTPS 连接来传输 cookie。

        

       读取Cookie
          $_COOKIE数组

       删除Cookie
          删除cookie不能使用unset,因为$_COOKIE是只读的。要想删除,只需要让其过期就就行:
          setcookie($name,'',time()-1000)

          Cookie的优缺点

        优点:存储在客户端,不会占用服务器的资源

        缺点:信息保存在客户端,安全性得不到保障,而且用户可以关闭cookie。用户有权限禁止Cookie

     三、Session

        Sesssion技术是将数据存储在服务器当中,这样用户没有办法禁用Session的使用。但Session不是完全脱离Cookie的,而是基于Cookie的。SessionID是存储在Cookie的,如果用户禁用Cookie,可以URL传递SessionID的值。Session默认保存在服务器的文件中,文件名为: sess_sessionid的值。

        

    • session 的操作

      1. session_start();//要使用之前一定要开启
      2. 然后直接操作$_SESSION数组
      3. 要删除,直接赋空数组:$_SESSION = [] 或者$_SESSION=null;
      4. 如果想删除文件,则使用session_destroy();//同时会删除对应session的cookie
    • session 配置(php.ini):在 php.ini 中,以 session 开头的参数配置,是否开启、路径、名称等,以及 session.gc 开头的垃圾回收配置。

      1. session.auto_start:指定会话模块是否在请求开始时自动启动一个会话。默认为 0(不启动)。
      2. session.cookie_domain:指定了要设定会话 cookie 的域名。默认为无,表示根据 cookie 规范产生 cookie 的主机名。
      3. session.cookie_lifetime: 以秒数指定了发送到浏览器的 cookie 的生命周期。值为 0 表示“直到关闭浏览器”。默认为 0
      4. session.cookie_path:指定了要设定会话 cookie 的路径。默认为 /
      5. session.name:指定会话名以用做 cookie 的名字。只能由字母数字组成,默认为 PHPSESSID
      6. session.save_path:定义了传递给存储处理器的参数。如果选择了默认的 files 文件处理器,则此值是创建文件的路径。默认为 /tmp
      7. session.use_cookies: 指定是否在客户端用 cookie 来存放会话 ID。默认为 1(启用)。
      8. session.use_trans_sid:指定是否启用透明 SID 支持。默认为 0(禁用)。
      9. session.gc_probability: 指定过了多少秒之后数据就会被视为“垃圾”并被清除。session.gc_probability 与 session.gc_divisor 合起来用来管理 gc(garbage collection 垃圾回收)进程启动的概率。默认为 1
      10. session.gc_divisor:session.gc_divisor 与 session.gc_probability 合起来定义了在每个会话初始化启动 gc(garbage collection 垃圾回收)进程的概率。此概率用 gc_probability/gc_divisor 计算得来。例如 1/100 意味着在每个请求中有 1% 的概率启动 gc 进程。session.gc_divisor 默认为 100。不建议把session.gc_divisor设置的非常的小,因为这样会消耗服务器的资源,从而降低工作效率
      11. session.gc_maxlifetime:session.gc_maxlifetime 指定过了多少秒之后数据就会被视为“垃圾”并被清除。 垃圾搜集可能会在 session 启动的时候开始( 取决于session.gc_probability 和 session.gc_divisor)。
      12. session.save_handler: 定义了来存储和获取与会话关联的数据的处理器的名字。默认为 files
      13. 详细参照手册:https://www.php.net/manual/zh/book.session.php

         

    垃圾回收配置示例:
    session.gc_probability=1 session.gc_divisor=100 session.gc_maxlifetime=1440
    /**
      表示数据在超过1440秒之后就会被视为垃圾,被视为垃圾之后由
    gc_probability / gc_divisorgc_probability / gc_divisor = 1/100 = %1)来决定数据被清理的机会,
     1/100 意味着在
    每个会话初始化时有 1% 的概率启动 gc 进程;
    */
    • session的优缺点

      • 优点:存储在服务器,信息安全
      • 缺点:占用服务器的资源,存在分布式问题
    • Session的分布式解决方案

        通过 session_set_save_handler函数,将session保存在redis或者数据库中。

      

      如果cookie被禁用,那么可以通过get来传递sessionid:

    "xxx.php?<?php echo session_name().'='.session_id();  ?>"//通过session_name()和session_id()来拼接
    
    "xxx.php?<?php echo SID; ?>"//SID是一个常量,SID常量在cookie开启的时候为空,在cookie被禁用的时候是session_name()和session_id()拼接的样子

    /**
      SID (string)包含着会话名以及会话 ID 的常量,格式为 "name=ID",或者如果会话 ID 已经在适当的会话 cookie 中设定时则为空字符串。 这和 session_id() 返回的是同一个 ID。
    */
      session信息的存储方式,如何进行遍历?
        session的存储方式有很多,默认情况下是存储在服务器中的文件,也可以通过 session_set_save_handler函数,将session保存在redis或者数据库中。
        
        遍历的话直接遍历$_SESSION这个数组就可以了
    杂念太多,必然根基浅薄
  • 相关阅读:
    使用jekyll和Github搭建个人博客
    numpy的ndarray和matrix的运算
    Beta分布
    卡方分布
    二项式分布
    正态分布
    概率质量函数(PMF)、概率密度函数(PDF)和累积概率密度函数(CDF)
    Jetson AGX Xavier/Ubuntu测试SSD的读写速度
    Jetson AGX Xavier/Ubuntu安装SSD
    datatable 参数详解
  • 原文地址:https://www.cnblogs.com/starshine-zhp/p/12820057.html
Copyright © 2011-2022 走看看