0

我在前端有customers_contoller.php

function login() {
 if(!empty($this->data)) {
  # Call function from Customer to insert Registration Data
  $loginData = ClassRegistry::init('Customer')->checkLogin($this->data['email'], $this->data['password']);
  if(isset($loginData) && !empty($loginData)) {
     $this->Session->write('Session.userid',$loginData['Customer']['id']);
     $this->Session->write('Session.email',$loginData['Customer']['email']);
     $this->redirect(HTTP_PATH."my-profile");
     exit;
  } else {
     $this->Session->setFlash('Please enter valid Username/Password','default',array('class'=>'flash_bad'));
 $this->redirect(HTTP_PATH."customer/login");
 exit;
  }
 }
}

在模型 customer.php 中,

function checkLogin($email,$password) {
 $loginData = $this->find('first', array('conditions' => array('Customer.email' => $email, 'Customer.password' => sha1($password), 'Customer.is_active' => 'Yes')));
 return $loginData;
}

大多数时候登录工作正常,但有时登录不工作,也没有收到错误消息。每次登录时只刷新页面。

我刚刚检查了所有这些事情,我发现当我当时无法登录我的网站时,浏览器的缓存显示会话路径的“/app/”,但我已经在app_controller.php的before_filter()函数中设置了实际的会话路径,使用$this->Session->path = '/';

我只是删除了所有浏览器的缓存并尝试登录,现在它工作正常。

谁能解释我是什么问题?它是随机发生的,所以我找不到问题的根源。

4

2 回答 2

1

您的问题的可能原因是由于传输到浏览器的 Cookie 路径不正确而导致会话丢失。它可能是随机发生的,因为混合了 PHP 的 Session 绑定策略(如通过 GET 参数或通过 Cookies)。

你设置错了$this->Session->path parameter。它映射到PHP 的session.cookie_path选项。在这篇文章中看到非常相似的例子。

session.cookie_path应该排除协议、主机和最终端口,所以只留下你网站的根目录'/'

$this->Session->path = '/';

另请参阅cookie的域和路径选项的描述。

编辑:为了进一步调查会话错误配置的原因,调试SessionComponent和传递给构造函数的参数CakeSession附近的类:$base

我猜它以某种方式错误地传递了,并且您/app/在浏览器中收到了 cookie 路径。

于 2012-04-30T11:39:44.103 回答
0

对于其他可能感兴趣的人,我在新用户的机器上遇到了类似的问题。事实证明,这台机器没有与互联网时间正确同步,并且机器将日期设置为未来的某一天。没有显示任何错误,但身份验证会话在重定向时被破坏,我总是会被重定向到登录页面。更新计算机上的时间并重新启动 Chrome 有所帮助。(奇怪的是,这在 Firefox 中不是问题。)

于 2013-01-02T11:23:55.697 回答