📅  最后修改于: 2020-10-26 05:16:12             🧑  作者: Mango
会话使我们能够跨请求管理唯一用户,并存储特定用户的数据。会话数据可以在您有权访问请求对象的任何地方,任何地方访问,即,可以从控制器,视图,助手,单元和组件访问会话。
可以通过执行以下代码来创建会话对象。
$session = $this->request->session();
要在会话中编写内容,我们可以使用write()会话方法。
Session::write($key, $value)
上面的方法将使用两个参数,即值和其下的键,将存储该值。
$session->write('name', 'Virat Gandhi');
要从会话中检索存储的数据,我们可以使用read()会话方法。
Session::read($key)
上面的函数将只接受一个参数,即值的键,该值是在写入会话数据时使用的。提供正确的键后,该函数将返回其值。
$session->read('name');
当您要检查会话中是否存在特定数据时,可以使用check()会话方法。
Session::check($key)
上面的函数仅将key作为参数。
if ($session->check('name')) {
// name exists and is not null.
}
要从会话中删除数据,我们可以使用delete()会话方法删除数据。
Session::delete($key)
上面的函数将仅使用要从会话中删除的值的键。
$session->delete('name');
当您想要读取然后从会话中删除数据时,我们可以使用consumer()会话方法。
static Session::consume($key)
上面的函数仅将key作为参数。
$session->consume('name');
当用户从站点注销时,我们需要销毁用户会话并销毁会话,使用destroy()方法。
Session::destroy()
$session->destroy();
销毁会话将从服务器中删除所有会话数据,但不会删除会话cookie。
在这种情况下,您想要续订用户会话,则可以使用renew()会话方法。
Session::renew()
$session->renew();
如以下程序所示,在config / routes.php文件中进行更改。
config / routes.php
setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
$builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
'httpOnly' => true,
]));
$builder->applyMiddleware('csrf');
//$builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']);
$builder->connect('/session-object',['controller'=>'Sessions','action'=>'index']);
$builder->connect('/session-read',['controller'=>'Sessions','action'=>'retrieve_session_data']);
$builder->connect('/session-write',['controller'=>'Sessions','action'=> 'write_session_data']);
$builder->connect('/session-check',['controller'=>'Sessions','action'=>'check_session_data']);
$builder->connect('/session-delete',['controller'=>'Sessions','action'=>'delete_session_data']);
$builder->connect('/session-destroy',['controller'=>'Sessions','action'=>'destroy_session_data']);
$builder->fallbacks();
});
在src / Controller / SessionsController.php中创建一个SessionsController.php文件。将以下代码复制到控制器文件中
src / Controller / SessionsController.php
request->getSession();
//read data from session
$name = $session->read('name');
$this->set('name',$name);
}
public function writeSessionData(){
//create session object
$session = $this->request->getSession();
//write data in session
$session->write('name','Virat Gandhi');
}
public function checkSessionData(){
//create session object
$session = $this->request->getSession();
//check session data
$name = $session->check('name');
$address = $session->check('address');
$this->set('name',$name);
$this->set('address',$address);
}
public function deleteSessionData(){
//create session object
$session = $this->request->getSession();
//delete session data
$session->delete('name');
}
public function destroySessionData(){
//create session object
$session = $this->request->getSession();
//destroy session
$session->destroy();
}
}
?>
在src / Template上创建一个Sessions目录,并在该目录下创建一个名为write_session_data.php的View文件。将以下代码复制到该文件中。
src / Template / Sessions / write_session_data.php
The data has been written in session.
在同一Sessions目录下创建另一个View文件,命名为retrieve_session_data.php ,并将以下代码复制到该文件中。
src /模板/会话/retrieve_session_data.php
Here is the data from session.
Name: =$name;?>
在同一Sessions目录下创建另一个名为check_session_data.ctp的View文件,并将以下代码复制到该文件中。
src /模板/会话/check_session_data.ctp
name exists in the session.
name doesn't exist in the database
address exists in the session.
address doesn't exist in the database
在同一Sessions目录下创建另一个名为delete_session_data.ctp的View文件,并将以下代码复制到该文件中。
src /模板/会话/delete_session_data.ctp
Data deleted from session.
在相同的Sessions目录下创建另一个名为destroy_session_data.ctp的View文件,并将以下代码复制到该文件中。
src /模板/会话/destroy_session_data.ctp
Session Destroyed.
通过访问以下URL执行以上示例。此URL将帮助您在会话中写入数据。
http:// localhost / cakephp4 / session-write
访问以下URL以读取会话数据-http:// localhost / cakephp4 / session-read
访问以下URL检查会话数据-http:// localhost / cakephp4 / session-check
访问以下URL删除会话数据-http:// localhost / cakephp4 / session-delete访问
访问以下URL销毁会话数据-http:// localhost / cakephp4 / session-destroy