【问题标题】:CakePHP: Session->write() not workingCakePHP: Session->write() 不工作
【发布时间】:2013-12-30 02:02:43
【问题描述】:

我正在为需要密码才能查看的特定页面构建一个非常基本的身份验证系统。我发现了其他几个听起来相似的问题,但唯一有明确解决方案的问题涉及似乎无法解决我的问题的配置设置。出于某种原因,$this->Session->write(...) 总是返回 false。

这是我的配置设置:

Configure::write('Session', array(
    'defaults' => 'php'
));

这是我尝试在控制器操作中编写会话的地方:

private function _handle_auth_attempt( $object ) {
    $submitted_pass = $this->request->data['Object']['password'];
    $correct_pass = $object['Object']['password'];
    $auth_cookie_name = $this->Object->auth_cookie_name($object);

    debug($auth_cookie_name); //'Object1.pass'
    debug($submitted_pass); //'foobar'

    if ( md5($submitted_pass) == md5($correct_pass) ) {
        $write1 = $this->Session->write( $auth_cookie_name, md5($submitted_pass) );
        $write2 = CakeSession::write( $auth_cookie_name, md5($submitted_pass) );            
        debug($write1); //FALSE
        debug($write2); //FALSE
        return TRUE;
    }

    $this->Session->setFlash('The password you entered is incorrect.');
    $this->redirect( $this->referer() );

}

更新

_handle_auth_attempt()里面我加了:

$_SESSION['foo'] = 'bar';
$this->Session-read('foo'); //'bar'

...他们工作正常。所以我很确定这不是权限问题。

【问题讨论】:

  • 你是在控制器中添加 SessionComponent 吗?
  • 你清除浏览器缓存了吗?
  • @GuillemoMansilla 我调试了 $component,我在 ->write(...) 之前的数组中看到了 Session、Cookie 和 Auth。
  • @praveen 我换了浏览器,情况也一样。

标签: php session cakephp cakephp-2.0 session-cookies


【解决方案1】:

从源代码来看,FALSE 的一种可能是会话名称为空。 那么你能检查一下结果是什么

debug($auth_cookie_name);

【讨论】:

  • 这是一个很好的建议,但我已经调试了所有变量,并且它们符合预期。
【解决方案2】:

我完全不明白,但我删除了“。”从我的会话 cookie 名称内部,它会导致 Session->write() 再次工作。

$this->Session->write('Object1.pass'); //FALSE
$this->Session->write('Object1pass'); //TRUE

虽然这解决了我眼前的问题,但我很想更好地理解这个问题。

更新

在仔细考虑之后,我怀疑发生的事情是多种因素的组合:

  1. CakePHP 使用“点”表示法将会话存储在我没有考虑的数组中。
  2. 我第一次运行代码时,它可能工作了...
  3. 但随后的每一次尝试都返回FALSE,因为它已经存在
  4. 我无法解释为什么read() 返回错误。

【讨论】:

    【解决方案3】:

    您的所有会话读/写都属于控制器:

    $this->Session->write('User.still_login', 'Yes');
    
    echo $this->Session->read('User.still_login'); // Yes as output
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-15
      • 2016-05-31
      • 1970-01-01
      • 1970-01-01
      • 2012-05-06
      相关资源
      最近更新 更多