1. 什么是Session?
Session其实是保存在服务器端的,保存的方式可以是文件,或数据库类型(默认是保存的是文件)
Session的运行依赖session_id,而session_id是存在cookie中的以,如果当浏览器禁用了cookie以后
就需要通过其他方式来实现(可以通过URL 传递session_id)
session.save_handler = files
可以通过改变存储方式默认是文件存储(files)
2. Session的使用
当使用session的时候必须要开启session
session_star() //开启session
当开启session的时候,服务器端会生成一个session_id保留到客户端并且会生成一个session文件保存在服务器
在php.ini文件中搜索 session.save_path 可以看session文件的保存路径
session_name() 存储目前session名称
session_id() 会话id
session的创建
session是以数组方式存储的所以可以用数组方式设置
$_SESSION[name] = value ; //设置session
echo $_SESSION[name]; //使用SESSION 输出SESSION
isset($_SESSION[name]); //是否设置SESSION
unset($_SESSION[name]); //销毁session变量而不是删除会话(可以勉强理解为session数组里面的变量)
删除session
1.session_unset();
会释放当前会话注册的所有会话变量,这会删除所有的$_SESSION数据,刷新后有Cookie穿过来,但里面没有数据
2.$_SESSION = array(); 效果同上
3.session_destroy(); 删除session文件和session_id
4.setcookie(session_name(),session_id(),time()-3600,'/'); 利用设置cookie过期时间来清除留在客户端的session
‘/ ’ 路径一定要设置 (在php.ini文件中搜索 session.save_path 可以看session文件的保存路径)
session_name //名
session_id // id 会话id
注:彻底删除session需要同时设置1、3、4步 (1、3会删除服务器端session文件)
实例:
<?php
session_start();
//设置SESSION
$_SESSION['name'] = 'Hello';
$_SESSION['age'] = 20;
//读取
echo $_SESSION['name']; // Hello
//修改
$_SESSION['name'] = 'new Hello';
?>
删除会话
<?php
//做所有操作时都应开启session
session_start();
session_unset();//删除会话变量,不会删除session_id和session文件
session_destroy(); //删除会话id和文件 不会删除内存中的会话
/*
要彻底删除需要配合使用
*/
?>
上面提到session默认用文件缓存,当用户把cookie禁用后将会生成多个session_id 产生文件
解决方案: 通过url进行传session_id
当我们使用自定义的session_id 时应放到session_star() 之前
uniqid() 生成一个唯一的id
session垃圾回收机制
session 的垃圾回收是概率性的, 根据php.ini配置的 (分子/分母) 如果是0,此时只能手动删除
session.gc_probability = 1 //计算分子
session.gc_divisor = 1000 //计算分母
session.gc_maxlifetime = 1440 //过期时间默认是24分钟
session.save_path = 路径 //session保存的目录