php会话控制(COOKIE、SESSION)知识

会话控制的两种方式:

cookie:

  1. 一种维持状态的方式
  2. Cookie其实就是一个文件,他是保存在客户端当中
  3. 没访问一次服务器,客户端浏览器会带着这个cookie信息去访问,服务器对应读取cookie信息
  4. 第一次访问,服务器设置一个cookie,将cookie信息存入到客户端浏览器当中
  5. 第二次访问,客户端浏览器带着cookie信息去访问服务器,服务器通过读取cookie信息来获取上一次访问的设置的信息
  6. $_COOKIE没有办法直接修改数组信息
  7. Setcookie前不允许有任何输出
  8. Cookie的删除要通过setcookie来设置过期时间
  9. Setcookie可以设置路径,设置的路径代表可以在本路径下获取该cookie信息,上级或者平级无法访问
  10. 如果没有设定过期时间,代表的意思是关闭浏览器cookie失效
  11. 如果没有给定path路径,代表的意思是设置cookie的有效路径为当前文件的路径

session:

  1. Session的信息是存储在服务器当中的
  2. Session是基于cookie的
  3. 客户端第一次访问服务器,服务器设置session,将详细的资料存入到session文件当中,然后将此session文件对应的session_id号交给客户端浏览器存入到cookie当中
  4. 客户端浏览器带着cookie来访问服务器,此时服务器会通过cookie当中的session_id来寻找服务器的session文件当中的对应的资料

设置session的步骤:

  1. 开启session环境Session_start();
  2. Session_name()获取ini当中的session.name的值
  3. Session_id()获取当前session的id号
  4.  如果我们想维持登录状态
    1. Setcookie(session_name(),session_id(),time()+3600);
  5.  删除session
    1. 开启session_start()
    2. 设置session的值为空或者unset
    3. 设置cookie的值过期
    4. 删除session文件【可选】

Cookie和session的关系和区别:

  1. 区别:
    1. Cookie文件是保存在客户端浏览器的
    2. Session文件是保存在服务器端的
  2. 关系:
    1. Session默认情况下离不开cookie
    2. Session的id号会保存在cookie当中,然后通过cookie当中的id号来对应去找对应的session文件

如果cookie被禁用掉,session还能使用吗?

  1. 默认情况下,不能使用session
  2. 特殊情况:
    1. 我们可以通过get的方式将session_id传递下去,前提是use_only_cookies=0
    2. 通过?session_name().”=”.session_id()
  3. 或者使用?SID
  4. 推荐使用SID,因为如果浏览器禁用cookie,SID会有值,值为session_name().”=”.session_id(),如果浏览器没有禁用cookie,SID是空的
  5. 将session的信息存入到数据库当中,或者自定义写文件