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のセッションバインディング戦略が混在しているため(GETパラメータやCookieなど)、ランダムに発生する可能性があります。

間違って設定しました$this->Session->path parameter。PHPのsession.cookie_pathオプションにマップされます。この投稿の非常によく似た例を参照してください。

session.cookie_pathプロトコル、ホスト、そして最終的にはポートを除外する必要があるため、Webサイトのルートだけを残してください'/'

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

Cookieのドメインおよびパスオプションの説明も参照してください。

編集:セッションの設定ミスの理由をさらに調査するために、コンストラクターに渡された引数の近くのデバッグSessionComponentとクラス:CakeSession$base

どういうわけか間違って渡されたと思います、そしてあなたは/app/ブラウザでクッキーパスを受け取りました。

于 2012-04-30T11:39:44.103 に答える
0

興味があるかもしれない他の誰かのために、私は新しいユーザーのマシンで同様の問題を抱えていました。マシンがインターネット時刻と正しく同期しておらず、マシンの日付が1日先に設定されていることが判明しました。エラーは表示されませんでしたが、リダイレクト時に認証セッションが破棄され、常にログインページにリダイレクトされていました。コンピューターの時刻を更新し、Chromeを再起動すると役に立ちました。(不思議なことに、これはFirefoxでは問題ではありませんでした。)

于 2013-01-02T11:23:55.697 に答える