CakePHP:会话->;write()不工作

CakePHP:会话->;write()不工作,php,session,cakephp,cakephp-2.0,session-cookies,Php,Session,Cakephp,Cakephp 2.0,Session Cookies,我正在为需要密码才能查看的特定页面构建一个非常基本的身份验证系统。我还发现了其他几个听起来类似的问题,但只有那些有明确解决方案的问题涉及配置设置,而这些设置似乎无法解决我的问题。由于某种原因,$this->Session->write(…)总是返回false 以下是我的配置设置: Configure::write('Session', array( 'defaults' => 'php' )); 下面是我尝试在控制器操作中编写会话的地方: private function _ha

我正在为需要密码才能查看的特定页面构建一个非常基本的身份验证系统。我还发现了其他几个听起来类似的问题,但只有那些有明确解决方案的问题涉及配置设置,而这些设置似乎无法解决我的问题。由于某种原因,
$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() );

}
更新

\u handle\u auth\u trunt()内
我添加了:

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

…而且效果很好。所以我很确定这不是权限问题。

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

debug($auth_cookie_name);

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

debug($auth_cookie_name);

我完全不明白这一点,但我从会话cookie的名称中删除了“.”,它使
session->write()
再次工作

$this->Session->write('Object1.pass'); //FALSE
$this->Session->write('Object1pass'); //TRUE
虽然这解决了我眼前的问题,但我想更好地理解这个问题

更新

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

  • CakePHP使用“点”表示法将会话存储在数组中,我没有说明这一点
  • 在我第一次运行代码时,它可能起作用了

  • 但随后每次尝试时,它都返回
    FALSE
    ,因为它已经存在我根本不理解这一点,但我从会话cookie的名称中删除了“.”,它使
    session->write()
    再次工作

    $this->Session->write('Object1.pass'); //FALSE
    $this->Session->write('Object1pass'); //TRUE
    
    虽然这解决了我眼前的问题,但我想更好地理解这个问题

    更新

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

  • CakePHP使用“点”表示法将会话存储在数组中,我没有说明这一点
  • 在我第一次运行代码时,它可能起作用了

  • 但每次后续尝试都返回
    FALSE
    ,因为它已经存在您的所有会话读/写都属于控制器:

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

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

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

    您是否正在将SessionComponent添加到控制器?是否清除了浏览器缓存?@Guillemansilla我调试了$component,在->写入(…)之前的数组中看到了会话、Cookie和身份验证@praveen I切换了浏览器,情况也一样。您是否将SessionComponent添加到控制器中?是否清除了浏览器缓存?@Guillemansilla我调试了$component,我在->写入(…)之前的数组中看到Session、Cookie和Auth。@praveen I切换了浏览器,情况也一样。这是一个很好的建议,但是我已经调试了所有的变量,它们和预期的一样。这是一个很好的建议,但是我已经调试了所有的变量,它们和预期的一样。