1

私は(SOとGoogle)を検索しましたが、他の人がこの状況をどのように処理しているかについての適切な説明を見つけることができません。

私のアプリケーションでは、バックエンドとしてPHP / Apacheを使用し、ハッシュタグブラウザの履歴にBenAlmanのjQueryBBQプラグインを使用しています。ユーザーのログインは、ログインページからPOSTを使用してPHPサーバー側でのみ処理され、サーバー側のセッションを使用して状態が維持されます。私が抱えている問題は、ユーザーがフラグメント(ハッシュ)を含むURLにアクセスし、ログインしていない場合、HTTPSログインページにリダイレクトされることです。これは、URLにフラグメントハッシュが含まれている場合を除いて、すべての状況でうまく機能します。サーバー側から開始されたリダイレクトの場合も同じ状況になります。この状況でjavascriptを使用して、リダイレクト前にハッシュタグを保持できるわけではありません。リダイレクト前にページの読み込みが完了することはないためです。

リダイレクト中にフラグメントが失われ(クライアント側のみであるため)、サーバー側には表示されないことを認識していますが、他のすべてのユーザーがこの状況を処理し、最初にアクセスしたURLを保持して、ユーザーが正しい結果を得ることができるようにするにはどうすればよいですか?ログインまたはリダイレクト後のページ?

アドバイスをいただければ幸いです。ありがとう。

4

1 に答える 1

0

JavaScriptを使用して、非表示の入力にフラグメントを入力します。

<input type="hidden" name="fragment" id="fragment">
<script>
if(window.location.hash){
    document.getElementById("#fragment").value=window.location.hash;
}
</script>

次に、バックエンドで、次のようにリダイレクトできます。

if(isset($_POST['fragment'])) {
    $fragment = '#'.$_POST['fragment'];
} else {
    $fragment = '';
}
header('Location: http://website/path'.$fragment);
exit;

おそらくフラグメントをurlencodeする必要があります。

于 2018-06-27T02:01:17.087 に答える