cakephp 会话管理
session 允许我们跨请求管理唯一用户,并为特定用户存储数据。会话数据可以在您有权访问请求对象的任何地方、任何地方访问,即可以从控制器、视图、助手、单元格和组件访问会话。
访问会话对象
可以通过执行以下代码来创建会话对象。
$session = $this->request->session();
写入会话数据
要在 session 中写东西,我们可以使用 write() session 方法。
session::write($key, $value)
上述方法将采用两个参数, value 和 key 下的值将被存储。
示例
$session->write('name', 'virat gandhi');
读取会话数据
要从 session 中检索存储的数据,我们可以使用 read() session 方法。
session::read($key)
上述函数将只接受一个参数,即 值的键,在写入会话数据时使用。一旦提供了正确的密钥,函数就会返回它的值。
示例
$session->read('name');
当您想检查会话中是否存在特定数据时,您可以使用 check() session 方法。
session::check($key)
上述函数将只接受 key 作为参数。
示例
if ($session->check('name')) { // name exists and is not null. }
删除会话数据
要从 session 中删除数据,我们可以使用 delete() session 方法删除数据。
session::delete($key)
上述函数将只获取要从会话中删除的值的键。
示例
$session->delete('name');
当你想从 session 中读取然后删除数据时,我们可以使用 consume() session 方法。
static session::consume($key)
上述函数将只接受键作为参数。
示例
$session->consume('name');
销毁会话
我们需要销毁一个用户会话,当用户从站点注销并销毁会话时,使用 destroy() 方法。
session::destroy()
示例
$session->destroy();
销毁会话将从服务器中删除所有会话数据,但不会删除会话 cookie。
续订会话
如果您想续订用户会话,我们可以使用 renew() session 方法。
session::renew()
示例
$session->renew();
完成会话
在 config/routes.php 文件中进行更改,如以下程序所示。
config/routes.php
use cake\http\middleware\csrfprotectionmiddleware; use cake\routing\route\dashedroute; use cake\routing\routebuilder; $routes--->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
namespace app\controller; use app\controller\appcontroller; class sessionscontroller extends appcontroller { public function retrievesessiondata() { //create session object $session = $this--->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 文件。 b> 在该文件中复制以下代码。
src/template/sessions/write_session_data.php
the data has been written in session.
在同一 sessions 目录下创建另一个名为 retrieve_session_data.php 的 view 文件,并将以下代码复制到该文件中。
src/template/sessions/retrieve_session_data.php
here is the data from session. name: <!--?=$name;