1

会員サイトがあります。すべての Web ページのヘッダー バーには、ユーザーがログインしているかどうかに応じて、次の 2 つのオプションがあります。

オプション 1) ユーザーがログインしている場合、次の 2 つのリンクが表示されます。

「user12345」「ログアウト」

オプション 2) ユーザーがログアウトしている場合、上記の 2 つのリンクは次のようになります。

「ログイン」「登録」

このページには、ユーザーの Cookie をチェックする Javascript コードが含まれています。ユーザー Cookie が存在する場合はオプション 1) が表示され、存在しない場合はオプション 2) が表示されます。Javascriptで問題ありません。上記のオプションが正しく表示されます。

これが問題です。サーバー側スクリプト (perl) を使用して「ログアウト」機能を実行します。スクリプトは Cookie を削除し、元のページにリダイレクトします。ページにオプション 2) が表示されることを願っていますが、表示されません。それはまだオプション1を示しています)。オプション 2) を表示するには、ページを更新する必要があります。ユーザーがログアウト リンクをクリックしても、ページに戻ったときにまだユーザー名が表示されるため、これは混乱を招きます。ログアウトしたことを確認するには、Web ブラウザを更新する必要があります。

オプション 2) は、「ログアウト」リンクをクリックするとページに表示されます。しかし、これを成功させる方法がまったくわかりません。

この問題を解決するための専門知識を提供してください。

4

2 に答える 2

1

まず、ページのリダイレクトとは別にログアウト機能をテストできるように、問題を分解することをお勧めします。

  • Perl スクリプトを変更して、ログアウトがリダイレクトされないようにします。

  • ログインしてから、ログアウトをクリックします。

  • Cookie を表示できる Chrome または Firefox 拡張機能を使用します。Cookie が削除されたことを確認します。

ここですべてがチェックアウトされた場合は、リダイレクトを再接続して上記の手順を繰り返すことをお勧めします。

  • ページがリダイレクトされ、ログインが表示されない場合 | ボタンを登録し、Cookie が削除されたかどうかを確認します。Cookie が表示される場合は、リダイレクト後にコードに何かがキャッシュされている可能性があります。

別の方法として、document.referrer を使用して JavaScript コードでログアウト URL をキャプチャし、これを使用してログインを表示するかどうかを決定することもできます。ボタンを登録します。例えば:

if(document.referrer = "/logout" || /* existing check of cookie goes here */) {
    // show login | register
} else {
    // show username, etc.
}

可能であれば、使いやすさに関する最善の解決策は、ログアウト URL を AJAX 呼び出しに変換して、ページをリロードする必要がないようにすることです。これは、応答オブジェクトをチェックして、ログアウト操作が成功したかどうかを判断できるため、上記のソリューションよりも優れています。その場合、ヘッダー バーを正しいテキストに動的に置き換えることができます。

jQuery.ajaxを使用した AJAX の例は次のとおりです。

$.ajax({ 
    url: '/logout',
    success: function(data) {
        if(data.logout == true) {
            // user is logged out
        }
    },
    error: function(jqXHR, textStatus, errorThrown) {
        /* problem with logout */
    }
});

成功した場合、perl ログアウト スクリプトは JSON オブジェクトを文字列として返す必要があります。

{"logout":true}

AJAX 呼び出しを行ったり、サーバーとの間でデータを転送したりする方法は他にもあります。Stackoverflow で「AJAX」を検索すると、これらの例を見つけることができます。

于 2012-04-07T04:04:58.443 に答える
0

Blockquoteまず、ページのリダイレクトとは別にログアウト機能をテストできるように、問題を分解することをお勧めします...

AJAX 呼び出しを使用せずに問題を修正しました。

于 2012-04-09T01:45:44.237 に答える