ホームページ > バックエンド開発 > PHPチュートリアル > thinkphp プロジェクトのバックグラウンドでのログインの問題、奇妙なこと

thinkphp プロジェクトのバックグラウンドでのログインの問題、奇妙なこと

WBOY
リリース: 2016-06-23 13:48:12
オリジナル
1436 人が閲覧しました

Thinkphp プロジェクトで奇妙な現象が発生しました。
ローカル環境でログインをクリックした後、バックエンドに正常に入りました。
仮想空間 Web サイトでは、ログインをクリックした後、バックエンドに入ることができませんでしたが、エラーは報告されず、点滅しました。
追跡 しばらくすると、次のステートメントも実行されました:

$this->display('login');
ログイン後にコピー

ローカル: 次に、この関数が実行されました:
    public function login() {
ログイン後にコピー

ただし、仮想空間でデバッグする場合、上記の関数は実行されませんでした。同じデータベースとコードですが、なぜこのようなことが起こるのでしょうか?お知らせ下さい!


ディスカッションに返信(解決策)

ログインに関することではないと思いますが、コンテキストを見てみましょう

バックグラウンドでセッションを判断するためのコードはありますか?それを削除して、ログインできるかどうかを確認してください

クリックしてログインした後のページジャンプコードは何ですか?

すごいです

!empty($_SESSION[C('SESSION_ADMIN_NAME')]) が true であり、!empty($_SESSION[C('SESSION_ADMIN_ID')]) も true であり、結果は両方で実行されることを追跡しました。ローカル空間と仮想空間 ステートメントへ:

    public function index() {        if (!empty($_SESSION[C('SESSION_ADMIN_NAME')]) && !empty($_SESSION[C('SESSION_ADMIN_ID')]) && strtolower(ACTION_NAME) != 'logout') {					             $this->redirect("Index/index");					         }		        $this->display('login');    }    /**     * 登录判断     */    public function login() {				
ログイン後にコピー

私は間違っています。!empty($_SESSION[C('SESSION_ADMIN_NAME')]) は false、!empty($_SESSION[C('SESSION_ADMIN_ID')] ) も false です。つまり、2 つの SESSION が空です

!empty($_SESSION[C('SESSION_ADMIN_NAME')]) && !empty($_SESSION[C('SESSION_ADMIN_ID')]) && ステートメントを削除すると、
が残ります。

 $this->display('login');
ログイン後にコピー

ログイン ページを更新すると、次のように表示されます: この Web ページにはリダイレクト ループが含まれています

クリックしてログインした後のページ ジャンプ コードは何ですか?



ログインをクリックすると、ページは http://.../Login/login.htm にジャンプします。
その後、すぐに http://.../Home/Login/index にジャンプします。 htm (ログイン ページ)

訂正: [ログイン] をクリックすると、ページはまず http://.../Login/login.htm にジャンプします
その後、自動的に http://.../Index/index.htm にジャンプします
最後に、自動的に http://.../Home/Login/index.htm (ログイン ページ) にジャンプします

if (strtolower(ACTION_NAME) != 'logout') {                                 $this->redirect("Index/index");                             }... ...
ログイン後にコピー

This $this->display('center'); ...

managerLibActionHomeLoginAction.class.php

$this->display('main');    }    public function main() {        $this->display('center');    }
ログイン後にコピー


このコードを追跡したところ、実際に $this->redirect('Login/index'); が実行されました
しかし、何らかの理由で、このコードはローカル テスト中にも実行されました。しかし、ログインページにジャンプしないのですか?

ランタイム ディレクトリをクリアして再試行してください


public function logout() {
が実行される場合、明らかに URL が間違っています
logout はログアウトすることです。

Runtime ディレクトリをクリアして再試行してください

public function logout() {
が実行される場合、明らかに URL が間違っています
logout はログアウトすることです。


ありがとうございます!なぜ logout() が実行されるのかわかりませんが、3 つの RUNTIME ディレクトリがすべて空になっていますが、状況は同じです。
サイトのコード全体を検索したところ、logout() を呼び出すコードは 4 つだけ見つかりましたが、どれもログインとは関係がありませんでした。
間違った URL はどこですか?この質問には困惑しています!

Runtime ディレクトリをクリアして再試行してください


public function logout() {
が実行される場合、明らかに URL が間違っています
logout はログアウトすることです。

ありがとうございます!なぜ logout() が呼び出されるのかわかりませんが、3 つのランタイム ディレクトリがすべて空になりましたが、状況は同じです。
URL が間違っているのはどこですか?この質問には困惑しています!

仮想マシンでテスト ページを開いてください:

public function logout() {        session_destroy();  //cjq add $fp = fopen('./qerr1f.txt','w+'); fwrite($fp,"ok"); fclose($fp);          $this->redirect('Login/index');    }
ログイン後にコピー

テスト ページを更新し続けて時間が出力されるかどうかを確認し、時間が変化しているかどうかを確認します。
時間が変わり続ける場合は、サーバーがセッションを構成していません

仮想マシンでテスト ページを開いてください:

<?phpsession_start();if(empty($_SESSION['time'])){ $_SESSION['time'] = time();}echo $_SESSION['time'];?>
ログイン後にコピー
ログイン後にコピー

テスト ページを更新し続けて時間が出力されているかどうかを確認し、時間が変化しているかどうかを確認してください。
時間が変わり続ける場合は、サーバーがセッションを適切に構成していません

ご返信ありがとうございます。更新しても時間は変わっていません。

<?phpsession_start();if(empty($_SESSION['time'])){ $_SESSION['time'] = time();}echo $_SESSION['time'];?>
ログイン後にコピー
ログイン後にコピー

2 つの環境の出力の違いを見てください。次のような手がかりに従えば、いつでもそれを理解できます。


<?phpecho $_SESSION[C('SESSION_ADMIN_NAME') ? $_SESSION[C('SESSION_ADMIN_NAME') : "NULL";?>
ログイン後にコピー

2 つの環境の出力の違いを見てください。このように手がかりを追っていけば出てきます


どちらの環境でも NULL が出力されるのですが、理由がよくわかりません。 。 。 ?
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート