zoukankan      html  css  js  c++  java
  • php_会话技术 — session

      session:将会话数据存储在服务器端,并且让数据能够识别浏览器的一种技术。
      原理图:

      

      通过分析原理图:
      1)会在服务器开辟SESSION会话数据区保存会话数据;
      2)开辟会话数据区后,将会生成一个唯一的PHPSESSID,并且返回给浏览器作为一个COOKIE数据。

      session的使用 -- 基本操作
      1.要使用session,必须先开启SESSION机制,使用session_start()函数

    #开启session
    session_start();

      2.增删改查操作

      我们可以通过操作$_SESSION数组变量来增删改查SESSION数据

      

      我们还可以通过配置php.ini中session.auto_start配置项来开启SESSION机制。默认情况下,配置的值为0,表示不自动开启,我们可以修改为1,来开启自动开启SESSION机制。

      (项目中不推荐使用这种方式,我们并不是所有程序页面都需要使用SESSION数据,什么时候需要就什么时候开启)

      $_SESSION变量和SESSION会话数据区的关系

      

      通过分析原理图:
      1)会话数据存储在服务器的会话数据区中;
      2)Session_start时,如果没有会话数据区将会开辟一个新的会话数据区;如果有,则找到该数据区,将其中的数据取出来初始化给$_SESSION变量。(没有的时候初始化为空数组)
      3)只有当程序运行结束时,才会将$_SESSION中的数据保存到会话数据区。
      4)我们程序将自动通过PHPSESSID区查找对应的会话数据区。

      销毁SESSION数据(区)操作

    session_destroy();

      注意:session_destroy销毁的是SESSION会话数据区,并没有直接操作到$_SESSION。

      SESSION属性的设置
      本质上是控制PHPSESSID来达到控制整个SESSION会话数据区中所有会话数据的属性。
      PHPSESSID不是我们手动创建的,而是PHP自动帮我们创建的,如果我们要修改PHPSESSID这条COOKIE数据的属性,我们需要通过PHP来进行相关的控制,而不是通过setcookie函数来进行相关的设置。
      有效期
      默认值为0,表示一个会话周期。
      一个会话周期:表示到关闭浏览器为止为一个会话周期。
      有效路径
      区别于普通COOKIE数据,PHPSESSID默认的有效路径为全站有效。
      有效域
      默认的是当前域有效。
      是否安全传输
      默认的是http和https都能访问。
      HTTPONLY
      这个属性对SESSION数据无意义
      对应的在php.ini中的配置项为,如下图:

      

      

      1)我们通过直接配置,不方便(可能经常要找运维人员); 2)另一个也不符合我们个性化的管理(一台服务器可能部署多个网站,修改配置将会影响到所有网站)

      所有PHP还支持我们在程序中自定义控制属性。通过函数session_set_cookie_params函数来进行设置。参数对应着PHPSESSID这个COOKIE的五个属性。

      

      TIPS:这个函数在指定第一个有效期参数时,有可能需要在不同环境增加或者减少时间戳来测试,这个是该函数的一个小bug。

      

      禁用COOKIE后如何使用SESSION

      我们可以通过php.ini文件的相关配置来开启另一种使用SESSION的机制。

      下面这个配置项默认的配置值为1,表示只适用COOKIE方式实现SESSION。  

      

      下面这个配置默认值为0,表示不允许通过传输的方式传递PHPSESSID的值。  

      

      我们可以将session.use_only_cookie设置为0并且将session.use_trans_sid为1实现禁用COOKIE后依然能够使用SESSION。

      

      

      SESSION的垃圾回收机制
      有时候,我们的PHPSESSID这个COOKIE消失以后,SESSION会话数据区依然存在。
      PHP提供一个垃圾回收机制,专门针对清理这类型的无效数据区。
      实现方式
      我们需要在php.ini中进行相应的配置。

      

      PHP将会根据gc_maxlifetime判断会话数据区是否已经失效(如果在这个指定的时间内这个会话数据区依然没有被访问过,那么PHP将认为这个会话数据区可能已经失效),如果失效,那么PHP将会以一个概率值来清除会话数据区,这个概率就是gc_probability除以gc_divisor!

      附: php_会话技术— cookie

  • 相关阅读:
    海量数据处理:十道面试题与十个海量数据处理方法总结
    C++中的static及内存分配
    面试时如何向面试官提问
    面试题3:斐波那契数列与爬楼梯
    面试题1:二进制中1的个数
    面试题:单链表的几种处理
    js网页下载csv格式的表格
    解决背景图文字盖住html里面的dom元素
    使用element-ui的常见问题
    Promise-async-await处理函数
  • 原文地址:https://www.cnblogs.com/bk233/p/7388972.html
Copyright © 2011-2022 走看看