session配置文件所在目录,vendor\yiisoft\yii2\web
1.会在使用的时候自动开启不用手动开启
2.开启和关闭 Sessions
$session = Yii::$app->session;
// 检查session是否开启
if ($session->isActive) ...
// 开启session
$session->open();
// 关闭session
$session->close();
// 销毁session中所有已注册的数据
$session->destroy();
//多次调用open() 和close() 方法并不会产生错误, 因为方法内部会先检查session是否已经开启。
2.访问 Session 数据
$session = Yii::$app->session;
// 获取session中的变量值,以下用法是相同的:
$language = $session->get('language');
$language = $session['language'];
$language = isset($_SESSION['language']) ? $_SESSION['language'] : null;
// 设置一个session变量,以下用法是相同的:
$session->set('language', 'en-US');
$session['language'] = 'en-US';
$_SESSION['language'] = 'en-US';
// 删除一个session变量,以下用法是相同的:
$session->remove('language');
unset($session['language']);
unset($_SESSION['language']);
// 检查session变量是否已存在,以下用法是相同的:
if ($session->has('language')) ...
if (isset($session['language'])) ...
if (isset($_SESSION['language'])) ...
// 遍历所有session变量,以下用法是相同的:
foreach ($session as $name => $value) ...
foreach ($_SESSION as $name => $value) ...
//当使用 session 组件访问 session 数据时候, 如果 session 没有开启会自动开启, 这和通过 $_SESSION 不同,$_SESSION 要求先执行 session_start()。
3.自定义session的存储
yii\web\Session 类默认存储 session 数据为文件到服务器上, Yii 提供以下 session 类实现不同的 session 存储方式
yii\web\DbSession:存储 session 数据在数据表中
yii\web\CacheSession:存储 session 数据到缓存中,缓存和配置中的缓存组件相关
yii\redis\Session:存储 session 数据到以 redis 作为存储媒介中
yii\mongodb\Session:存储 session 数据到 MongoDB。
所有这些session类支持相同的API方法集,因此, 切换到不同的session存储介质不需要修改项目使用session的代码。
如何在应用配置中配置yii\web\DbSession 将数据表作为 session 存储介质
return [
'components' => [
'session' => [
'class' => 'yii\web\DbSession',
// 'db' => 'mydb', // 数据库连接的应用组件ID,默认为'db'.
// 'sessionTable' => 'my_session', // session 数据表名,默认为'session'.
],
],
];
4.Flash 数据
//Flash数据是一种特别的 session 数据,它一旦在某个请求中设置后, 只会在下次请求中有效,然后该数据就会自动被删除。 常用于实现只需显示给终端用户一次的信息, 如用户提交一个表单后显示确认信息。
//可通过 session 应用组件设置或访问 session,例如:
$session = Yii::$app->session;
// 请求 #1
// 设置一个名为"postDeleted" flash 信息
$session->setFlash('postDeleted', 'You have successfully deleted your post.');
// 请求 #2
// 显示名为"postDeleted" flash 信息
echo $session->getFlash('postDeleted');
// 请求 #3
// $result 为 false,因为flash信息已被自动删除
$result = $session->hasFlash('postDeleted');
//和普通 session 数据类似,可将任意数据存储为 flash 数据。
//当调用 yii\web\Session::setFlash() 时, 会自动覆盖相同名的已存在的任何数据, 为将数据追加到已存在的相同名 flash 中,可改为调用 yii\web\Session::addFlash()