📅  最后修改于: 2020-10-16 07:15:35             🧑  作者: Mango
会话使数据可以跨多个页面访问。会话在服务器上的一个临时目录中创建一个文件,该目录中存储了所有会话变量。在该特定用户访问期间,此数据可用于您网站的所有页面。
会话开始时,将发生以下情况-
PHP为该特定会话创建唯一的ID。
一个称为PHPSESSID的cookie在客户端发送到浏览器。
服务器在保存所有会话变量的临时文件夹中创建一个文件。
当服务器要从会话变量中检索值时,PHP会自动从PHPSESSID cookie获取唯一的会话ID。然后,它在其临时目录中查找所需的文件。
要开始会话,您应该调用session_start()函数。所有会话变量都存储在$ _SESSION全局变量中。您还可以使用isset()函数来检查是否设置了会话变量-
要销毁会话,应调用session_destroy()函数。要销毁单个会话变量,请调用unset()函数-
会话允许数据在用户请求之间持久化。在PHP中,您可以通过$ _SESSION变量访问它们。在Yii中,您可以通过会话应用程序组件访问会话。
步骤1-将actionOpenAndCloseSession方法添加到SiteController 。
public function actionOpenAndCloseSession() {
$session = Yii::$app->session;
// open a session
$session->open();
// check if a session is already opened
if ($session->isActive) echo "session is active";
// close a session
$session->close();
// destroys all data registered to a session
$session->destroy();
}
在上面的代码中,我们获得了会话应用程序组件,打开了一个会话,检查它是否处于活动状态,关闭该会话,最后销毁它。
步骤2-在Web浏览器的地址栏中键入http:// localhost:8080 / index.php?r = site / open-and-close-session ,您将看到以下内容。
要访问会话变量,可以使用set()和get()方法。
步骤3-将actionAccessSession方法添加到SiteController 。
public function actionAccessSession() {
$session = Yii::$app->session;
// set a session variable
$session->set('language', 'ru-RU');
// get a session variable
$language = $session->get('language');
var_dump($language);
// remove a session variable
$session->remove('language');
// check if a session variable exists
if (!$session->has('language')) echo "language is not set";
$session['captcha'] = [
'value' => 'aSBS23',
'lifetime' => 7200,
];
var_dump($session['captcha']);
}
步骤4-转到http:// localhost:8080 / index.php?r = site / access-session ,您将看到以下内容。