【问题标题】:How to delete session in cakephp 3.0?如何在 cakephp 3.0 中删除会话?
【发布时间】:2015-05-20 12:59:51
【问题描述】:

所有代码都在一个控制器中

我的代码是这样的。

    public function login()
    {
    $session = $this->request->session();
    $session_event_id = $session->read('Events.event_id');
    $session_division_id = $session->read('Events.division_id');

    if(!$session_event_id || !$session_division_id) {
        $event_table = TableRegistry::get('Events');
        $event = $event_table->find('all', ['fields' => ['id'], 'order' => 'id desc'])->first();
        $session->write('Events.event_id', $event->id);
        $session_event_id = $session->read('Events.event_id');

        $division_table = TableRegistry::get('Divisions');
        $division = $division_table->find('all',['fields' => ['id'], 'conditions' => ['event_id' => $event->id]])->first();
        $session->write('Events.division_id', $division->id);
        $session_division_id = $session->read('Events.division_id');
    }
    }

通过上面的代码,我可以写入和读取会话值,但是在注销时我想删除这些会话数据

public function logout()
{    
    $session = $this->request->session();
    $this->$session->delete();
    return $this->redirect($this->Auth->logout());
}

警告 (4096):Cake\Network\Session 类的对象不能 转换为字符串 [APP/Controller/UsersController.php,第 56 行]

注意(8):Cake\Network\Session 类的对象到字符串的转换 [APP/Controller/UsersController.php,第 56 行]

错误:在非对象文件上调用成员函数 delete() /var/www/html/MEX/src/Controller/UsersController.php

【问题讨论】:

  • 如果您收到错误,即使它们非常基本,请务必发布 completeexact 错误消息,包括可能的堆栈跟踪!
  • 我已经明确提到了你可以检查的错误
  • 在注销时查看会话的delete() 的调用。你有$this->$session->delete() 而不是$session->delete()
  • 谢谢。这些类型的错误再次出现警告(2):Cake\Network\Session::delete() 缺少参数 1,在第 56 行的 /var/www/html/MEX/src/Controller/UsersController.php 中调用,并且已定义 [CORE/src/Network/Session.php,第 477 行] 注意(8):未定义变量:名称 [CORE/src/Network/Session.php,第 479 行] 警告(2):无法修改标头信息 - 标头已存在发送者(从警告 (2) 开始的输出:session_regenerate_id() [function.session-regenerate-id]:无法重新生成会话 id - 标头已发送 [CORE/src/Network/Session.php,第 576 行]
  • 错误可能更清楚吗? Session::delete() 需要传递一个参数。无意冒犯,但也许你应该先开始学习 PHP/编程基础,然后再开始使用像 CakePHP 这样成熟的框架。

标签: session cakephp cakephp-3.0


【解决方案1】:

您正在寻找$this->request->session()->destroy();

http://book.cakephp.org/3.0/en/development/sessions.html#destroying-the-session

只是一个提示 - 对于一个不需要重复使用 $session 的函数来说,存储变量 $session 并没有多大意义。我将$this->request->session(); 存储在变量中的唯一情况是当我访问会话以在同一个函数中进行多次读写时。

(就错误而言,@Eagle 是正确的,因为您使用该存储变量引用了两次“$this”。)

【讨论】:

    【解决方案2】:

    感谢您的支持和帮助,终于我自己找到了解决问题的方法

        $session = $this->request->session();
        $session->delete('Events.event_id');
        $session->delete('Events.division_id');
    

    通过这样做,我可以清除会话数据。谢谢

    【讨论】:

      猜你喜欢
      • 2018-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-03
      • 1970-01-01
      • 2010-11-08
      • 2022-01-03
      • 2012-09-01
      相关资源
      最近更新 更多