session
Laravel支持的session类型有:
- file
- cookie
- database
- memcached/redis
- array
当然你也可以自定义。其中file
就是一般的文件存储,其生成的文件被保存在storage/framework/sessions
中。cookie
则是会把存储的数据进行加密处理,防止用户恶意修改。database
作为缓存时,则需要创建对应的session
表,该表的结构如下:
create table sessions(
id varchar(255) unique,
user_id int not null,
ip_address varchar(255) not null.
user_agent text not null,
payload text,
last_activity int
);
剩下的memcache/redis
都只要通过Composer
安装predis/predis
包,并在config/database.php
中设置对应的配置项,使Laravel
能连接该数据库,最后再在config/session.php
中开启上述配置。至于具体如何配置,那就到时候再说。
session相关函数
session()
session(['key'=>'value'])
是设置,session('key')
是获取。
get()
session()->get('key')
是获取,session()->get('key','default value')
是当key
不存在时,返回default value
的值。
all()
session()->all()
是获取全部缓存信息。
has()
该key
存在且不为null
才会返回true
。session()->has('key')
。
exists()
比has()
的要求低,只要存在该key
就会返回true
。
put()
传递新的值到session中,session()->put('key','value')
push()
跟put()
的区别是push()
是将值推送到数组中。假设缓存原始的数据结构如下:
$session=[
'user'=>[
'teams'=>[
1,
2,
3
]
]
];
接下来你就可以运行:session()->push('user.teams',4);
上面的值就会变成:
$session=[
'user'=>[
'teams'=>[
1,
2,
3,
4
]
]
];
pull()
先获取缓存中的key
,然后再清除掉,session()->pull('key')
。
flash()
缓存一次性数据session()->flash('key','value');
。
reflash()
将上面的一次性数据重新有效session()->reflash()
。
keep()
跟reflash
不能指定key
不同,keep()
是可以指定key
的,session()->keep(['key1','key2'])
。
forget()
跟pull
不同的是,forget()
是直接删除掉该key
。
flush()
直接清除掉全部的key
,session()->flush()
。
regenerate()
好像跟验证有关的,那里还没有接触。
自定义Session驱动
这里在github上找了一个MongoDB
的缓存驱动,不知道有没有用:
composer require jenssegers/mongodb-session
具体设置方法可以看官网上的那个教程:自定义Session驱动