cookie
在PHP中实现会话的原理是为用户分配一个唯一的加密ID,并保存在用户客户端,并在整个会话时间周期内有效。
一般情况下使用cookie来进行保存,但也可以通过url传递。
用户通过携带会话ID到服务器获取内容。
说白了,cookie是客户端存储数据的手段,并在请求服务器时自动携带cookie数据。
php向前端写cookie方法:
<?php
setcookie('web', 'hello world', time() + 60*60*24, );
// 读取
print_r($_COOKIE);
注意,当设置的过期时间是过去的,cookie会被删掉,默认是0,也就是session会话时间。路径默认是/,也就是当前路径下都可以访问,如果指定如’/app’,则表示app目录下的脚本可以访问。就算是子域名不同,cookie也不能共享,除非domain设置成子域名的上一级域名,这样就都可以匹配到。secure表示cookie只能通过HTTPS访问。Http-only表示cookie无法被js操作;
session
session是服务器会话状态,可用于记录访问用户后台会话数据。
会话开启,必须要开启 SESSION 才可以使用,有两种方法可以开启会话。使用脚本开启会话,要保证在使用会话的所有脚本中执行。
session_start();
通过修改php.ini配置项
session.auto_start
,自动开启会话(不建议使用)会话变量
// 写入
$_SESSION['name']='houdunren.com';
// 删除
unset($_SESSION['name']);
// 删除全部session(内容删除且把session文件删除)
$_SESSION = [];
session_destroy();
session存储目录
对于虚拟主机来说,如果所有用户的 Session 都保存在系统临时文件夹里,将给维护造成困难,而且降低了安全性,我们可以手动设置 Session 文件的保存路径,session_save_path() 就提供了这样一个功能。我们可以将 Session 存放目录指向一个不能通过 Web 方式访问的文件夹,当然,该文件夹必须具备可读写属性,这样可以加快session的访问效率。
<?php
// 设置一个存放目录
$savePath = './session_save_dir/';
// 保存一天
$lifeTime = 24 * 3600;
session_save_path($savePath);
session_set_cookie_params($lifeTime);
session_start();
$_SESSION['admin'] = true;
?>
session_set_cookie_params()函数可以来设置cookie的生命周期,该函数同样必须在 session_start() 函数调用之前调用。
session相关函数
session_name():读取与设置session的key,默认为PHPSESSION
- 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 之后可以使用。