Session是服务器与浏览器或者客户端之间的一条“纽带”,我以前疑惑既然有Cookie了,为什么还要有Session呢。原来这两者是不同的。Cookie一般是把数据存在浏览器里,Session是存在Cookie里面,Session也可以是文件存在服务器里,也可以转换为存在数据库里和内存里。Session的函数也比Cookie的函数多一些,下面是一些常用的函数。
数据都保存在超全局数组$_SESSION中,任何相关session的数据都需要用到这个变量。
session_cache_expire()--返回当前缓存的到期时间
session_destroy()--销毁会话数据
session_gc()--垃圾回收,概率触发或定时触发
session_id()--获取/设置当前ID
session_is_registered()--检查变量是否在会话中已经注册
session_register_shutdown()--关闭会话
session_save_path()--读取/设置当前会话的保存路径
下面是SessionHandlerInterface类,名字就直接反映了这个类的功能。
SessionHandlerInterface::close
SessionHandlerInterface::destroy
SessionHandlerInterface::gc
SessionHandlerInterface::open
SessionHandlerInterface::read
SessionHandlerInterface::write
下面这段代码是把session写进数据库的,从慕课网的PHP课程摘抄的,很实用。
public function write($session_id,$session_data){
$newExp=time()+$this->lifetime;
$session_id=mysqli_escape_string($this->link,$session_id);
//首先查询是否存在指定的Session_id,如果存在相当于更新数据,否则是第一次,则写入数据
$sql="SELECT * FROM sessions WHERE session_id='{$session_id}'";
$result=mysqli_query($this->link,$sql);
if(mysqli_num_rows($result)==1){
$sql="UPDATE sessions SET session_expires='{$newExp}',session_data='{$session_data}' WHERE session_id='{$session_id}'";
}else{
$sql="INSERT sessions VALUES('{$session_id}','$session_data','{$newExp}')";
}
mysqli_query($this->link,$sql);
return mysqli_affected_rows($this->link)==1;
}