1、为什么使用会话控制?
因为http请求是无状态、无连接。 意味着服务器是无法区分不同的用户的。
cookie和session统一称为会话控制,主要是为了解决这个问题。
2、session的运行原理
当第一次访问网站时,Seesion_start()函数就会创建一个唯一的Session ID,并自动通过HTTP的响应头,将这个Session ID保存到客户端Cookie中。同时,也在服务器端创建一个以Session ID命名的文件,用于保存这个用户的会话信息。
当同一个用户再次访问这个网站时,也会自动通过HTTP的请求头将Cookie中保存的Seesion _id再携带过来,这时Session_start()函数就不会再去分配一个新的Session ID,而是在服务器的硬盘中去寻找和这个Session ID同名的Session文件,将这之前为这个用户保存的会话信息读出,在当前脚本中应用,达到跟踪这个用户的目的
3、session原生的使用方式
开启session 在PHP中使用session_start()
session存储,以数组的形式使用
$_SESSION[‘session名’]=’值’;
取出session的数据
S
E
S
S
I
O
N
[
‘
s
e
s
s
i
o
n
名
’
]
;
销
毁
s
e
s
s
i
o
n
s
e
s
s
i
o
n
d
e
s
t
r
o
y
(
)
;
/
/
销
毁
和
当
前
S
e
s
s
i
o
n
有
关
的
所
有
资
料
该
函
数
并
不
会
释
放
和
当
前
S
e
s
s
i
o
n
相
关
的
变
量
,
也
不
会
删
除
保
存
在
客
户
端
C
o
o
k
i
e
中
的
S
e
s
s
i
o
n
I
D
。
销
毁
的
是
s
e
s
s
i
o
n
文
件
,
因
为
_SESSION[‘session名’]; 销毁session session_destroy(); //销毁和当前Session有关的所有资料 该函数并不会释放和当前Session相关的变量,也不会删除保存在客户端Cookie中的SessionID。销毁的是session文件,因为
SESSION[‘session名’];销毁sessionsessiondestroy();//销毁和当前Session有关的所有资料该函数并不会释放和当前Session相关的变量,也不会删除保存在客户端Cookie中的SessionID。销毁的是session文件,因为_SESSION数组和自定义的数组在使用上是相同的,所以我们可以使用unset()函数来释放在Session中注册的单个变量。
unset($_SESSION[‘名字’]) //删除单个session
$_SESSION=array(); //销毁所有session
注意:session_start()函数之前不能有任何输出
4、禁用 COOKIE 后 SEESION 还能用吗?
可以
session 默认情况下是基于 cookie 的,对于 session 来说,每生成一个 sessionid,都会 将其发送到浏览器端,让后将其保存到 cookie 当中如果禁用了 cookie,则基于 cookie 的 session 不好使了,我们可以使用 get,传递 SID, 或者直接开启透明的 SID(此时需要关闭基于 cookie 的 session 配置项)
5、tp框架中session的使用
session的用法
控制器可以直接使用 think\facade\Session 类操作 Session
Session::set(‘name’,‘thinkphp’) //存储 (当前作作用域下)
Session::get(‘name’); //取值 (当前作用域)
Session::has(‘name’); //判断是否有值 (当前作用域)
Session::delete(‘name’); //删除 (当前作用域)
控制器也可以使用助手函数
session(‘name’, ‘thinkphp’); // 赋值(当前作用域)
session(‘name’); // 取值(当前作用域)
session(’?name’); // 判断(当前作用域)是否赋值
session(‘name’, null); // 删除(当前作用域)
模板中输出session的值
{$Think.session.session的名字} //在模板中使用系统变量