会话cookie没有写在CakePHP 2中

时间:2014-11-29 23:28:19

标签: php session cakephp authentication cookies

上周末我试图解决一个网站上没有在IE中保存会话的错误 - 今天我在笔记本电脑上的网站上做了进一步的工作,我再也无法登录了 - 我不知道做了一些非常愚蠢的事情。

我在Windows笔记本电脑上使用xampp,并在localhost上工作,这种情况发生在所有浏览器中。我对解决这些问题的方法不是很有经验 - 我已经能够确定以下内容:

  • 用户可以登录(Auth-> login()成功登录用户),问题是会话在重定向时消失了
  • 我可以看到在我的/ tmp / dir中写入的Sessions包含(看起来是什么)正确的数据
  • 我可以创建自己的愚蠢的cookie并且它们的值仍然存在
  • 该网站不存在其他Cookie

所以,在我看来会话cookie没有被设置,但我已经没有想到为什么会这样。我没有更改任何与cookie相关的浏览器设置(在IE中启用Cookie之外),我已经仔细检查了我的Chrome Cookie设置。正如我所提到的,我还在AppController中编写了一些垃圾cookie,我可以看到它们被创建,并且它们的数据仍然存在。

如果我在login()之后调用$ _SESSION,一切看起来都很棒,但是如果我在登录前打印$ _SESSION,它就是空的。

我很确定我已经设法做了一些迟钝的事情,但我已经完成了关于它可能是什么的想法。我已将我的/app/core.php恢复为Cake默认值:

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

我的login()函数基本上如下所示:

    public function login() {
    if ($this->request->is('post')) {
        if ($this->Auth->login()) {
            return $this->redirect($this->Auth->redirect());        
        } else { 
            $this->Session->setFlash(__('Invalid username or password, try again.')); 
        }

AppController中的身份验证设置:

class AppController extends Controller {
public $components = array(
    'Session',
    'Cookie',
    'Acl',
    'Email',
    'Auth' => array(
        'authenticate' => array(
            'Form' => array(
                'fields' => array('username' => 'email', 'password' => 'password')
        )),
        'authorize' => array(
            'Actions' => array('actionPath' => 'controllers')
        ),
        'loginRedirect' => array('controller' => 'users', 'action' => 'dashboard'),
    ),
);

在login()重定向之前打印$ this-> Auth-> user(),$ _SESSION的示例输出:

\app\Controller\UsersController.php (line 203)
array(
    'id' => '10',
    'name' => 'super',
    'is_active' => '1',
    'email' => 'super@test.com',
    'group_id' => '3',
    'address' => '3',
    'phone' => 'xxxxx',
    'category' => 'P',
    'communication_in' => 'E',
    'created' => '2014-11-29 16:27:19',
    'modified' => '2014-11-29 16:27:19',
    'Group' => array(
        'id' => '3',
        'name' => 'Administrators',
        'created' => '2014-11-16 21:01:35',
        'modified' => '2014-11-16 21:01:35'
    )
)
\app\Controller\UsersController.php (line 204)
array(
    'Config' => array(
        'userAgent' => '4af162a3a94462226b6e93c6806203aa',
        'time' => (int) 1417317929,
        'countdown' => (int) 10,
        'language' => 'eng'
    ),
    'Auth' => array(
        'User' => array(
            'id' => '10',
            'name' => 'super',
            'is_active' => '1',
            'email' => 'super@test.com',
            'group_id' => '3',
            'address' => '3',
            'phone' => 'xxxx',
            'category' => 'P',
            'communication_in' => 'E',
            'created' => '2014-11-29 16:27:19',
            'modified' => '2014-11-29 16:27:19',
            'Group' => array(
                'id' => '3',
                'name' => 'Administrators',
                'created' => '2014-11-16 21:01:35',
                'modified' => '2014-11-16 21:01:35'
            )
        )
    )
)

上次创建的会话文件:

配置|一个:4:{S:9:"的userAgent&#34 ;; S:32:" 4af162a3a94462226b6e93c6806203aa&#34 ;; S:4:"时间&#34 ;;我:1417317929; S:9:"倒计时&#34 ;; I:10; S:8:"语言&#34 ;; S:3:"主机&#34 ;;}验证|一个:1:{S:4:"用户&#34 ;;一个:12:{S:2:" ID&#34 ;; S:2:" 10&#34 ;; S: 4:"名称&#34 ;; S:5:"超&#34 ;; S:9:" IS_ACTIVE&#34 ;; S:1:" 1&#34 ;; S:5:"电子邮件&#34 ;; S:14:" super@test.com" ;; S:8:" GROUP_ID&#34 ;; S:1:&#34 ; 3&#34 ;; S:7:"地址&#34 ;; S:1:" 3&#34 ;; S:5:"电话&#34 ;; S:10:& #34;为XXXXX&#34 ;; S:8:"类别&#34 ;; S:1:" P&#34 ;; S:16:" communication_in&#34 ;; S:1 :" E&#34 ;; s:7:"创建&#34 ;; s:19:" 2014-11-29 16:27:19&#34 ;; s:8:& #34;修改&#34 ;; s:19:" 2014-11-29 16:27:19&#34 ;; s:5:" Group&#34 ;; a:4:{s: 2:" ID&#34 ;; S:1:" 3&#34 ;; S:4:"名称&#34 ;; S:14:"管理员&#34 ;; s:7:"创建&#34 ;; s:19:" 2014-11-16 21:01:35&#34 ;; s:8:"修改&#34 ;; s: 19:" 2014-11-16 21:01:35&#34 ;;}}}

1 个答案:

答案 0 :(得分:1)

当天的Facepalm: 几个小时后,我终于想到检查phpinfo(),当然,session.cookie-domain被设置为远程站点。我想上周我编辑了错误的PHP ini文件。