cookie

在PHP中实现会话的原理是为用户分配一个唯一的加密ID,并保存在用户客户端,并在整个会话时间周期内有效。
一般情况下使用cookie来进行保存,但也可以通过url传递。
用户通过携带会话ID到服务器获取内容。
说白了,cookie是客户端存储数据的手段,并在请求服务器时自动携带cookie数据。

  1. php向前端写cookie方法:

    1. <?php
    2. setcookie('web', 'hello world', time() + 60*60*24, );
    3. // 读取
    4. print_r($_COOKIE);

    注意,当设置的过期时间是过去的,cookie会被删掉,默认是0,也就是session会话时间。路径默认是/,也就是当前路径下都可以访问,如果指定如’/app’,则表示app目录下的脚本可以访问。就算是子域名不同,cookie也不能共享,除非domain设置成子域名的上一级域名,这样就都可以匹配到。secure表示cookie只能通过HTTPS访问。Http-only表示cookie无法被js操作;

    session

    session是服务器会话状态,可用于记录访问用户后台会话数据。
    会话开启,必须要开启 SESSION 才可以使用,有两种方法可以开启会话。

  2. 使用脚本开启会话,要保证在使用会话的所有脚本中执行。

    1. session_start();
  3. 通过修改php.ini配置项 session.auto_start,自动开启会话(不建议使用)

    会话变量

    1. // 写入
    2. $_SESSION['name']='houdunren.com';
    3. // 删除
    4. unset($_SESSION['name']);
    5. // 删除全部session(内容删除且把session文件删除)
    6. $_SESSION = [];
    7. session_destroy();

    session存储目录

    对于虚拟主机来说,如果所有用户的 Session 都保存在系统临时文件夹里,将给维护造成困难,而且降低了安全性,我们可以手动设置 Session 文件的保存路径,session_save_path() 就提供了这样一个功能。我们可以将 Session 存放目录指向一个不能通过 Web 方式访问的文件夹,当然,该文件夹必须具备可读写属性,这样可以加快session的访问效率。

    1. <?php
    2. // 设置一个存放目录
    3. $savePath = './session_save_dir/';
    4. // 保存一天
    5. $lifeTime = 24 * 3600;
    6. session_save_path($savePath);
    7. session_set_cookie_params($lifeTime);
    8. session_start();
    9. $_SESSION['admin'] = true;
    10. ?>

    session_set_cookie_params()函数可以来设置cookie的生命周期,该函数同样必须在 session_start() 函数调用之前调用。

    session相关函数

  4. session_name():读取与设置session的key,默认为PHPSESSION

  5. session_id():获取session的value值

    session垃圾回收

    session.gc_probability

    session清除无效session的基率。

    session.gc_divisor

    启动垃圾回收程序的概率。概率计算公式为:session.gc_probability/session.gc_divisor,如果网站访问量大建议将概率降低如 1/1000~5000。

    session.gc_maxlifetime

    session文件过期时间,超过这个时间没有使用的session将视为垃圾,将在下次垃圾回收时删除。

    自定义session引擎类

    也就是自定义session的调用方式。PHP 5.4之后,我们可以使用session_set_save_handler() 设置用户自定义会话存储函数。 如果想使用 PHP 内置的会话存储机制之外的方式, 可以使用本函数。
    这个函数接受一个参数,即实现了 SessionHandlerInterface 接口的对象, 例如 SessionHandler。 自 PHP 5.4 之后可以使用。