CakePHP:Session-> write()不起作用

时间:2013-12-11 21:30:47

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

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

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

3 个答案:

答案 0 :(得分:1)

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

debug($auth_cookie_name);

答案 1 :(得分:0)

我根本不明白这一点,但我删除了“。”从我的会话cookie名称中,它使Session->write()再次起作用。

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

虽然这解决了我当前的问题,但我希望能更好地理解这个问题。

<强>更新

经过深思熟虑之后,我怀疑发生的事情是多种因素:

  1. CakePHP使用“点”表示法将数组存储在我未考虑的数组中。
  2. 我第一次运行代码时,它可能有用......
  3. 但是每次后续尝试都会返回FALSE,因为它已经存在&lt; - 未经测试
  4. 我没有解释为什么read()返回false。

答案 2 :(得分:0)

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

$this->Session->write('User.still_login', 'Yes');

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