我正在为需要密码才能查看的特定页面构建一个非常基本的身份验证系统。我发现了其他几个听起来相似的问题,但是唯一一个有明确解决方案的问题涉及配置设置似乎无法解决我的问题。出于某种原因,$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'
......他们工作正常。所以我很确定这不是权限问题。
答案 0 :(得分:1)
从源代码中,FALSE的一种可能性是会话名称为空。 那么你可以查看结果是什么
debug($auth_cookie_name);
答案 1 :(得分:0)
我根本不明白这一点,但我删除了“。”从我的会话cookie名称中,它使Session->write()
再次起作用。
$this->Session->write('Object1.pass'); //FALSE
$this->Session->write('Object1pass'); //TRUE
虽然这解决了我当前的问题,但我希望能更好地理解这个问题。
<强>更新强>
经过深思熟虑之后,我怀疑发生的事情是多种因素:
FALSE
,因为它已经存在&lt; - 未经测试read()
返回false。 答案 2 :(得分:0)
所有会话读/写都属于控制器:
$this->Session->write('User.still_login', 'Yes');
echo $this->Session->read('User.still_login'); // Yes as output