0

私はこのようなものを持っています:(このページでユーザーをログに記録する必要がある場合)

if(!isset($_SESSION['usr_id'])){          //if not a logged user
    $_SESSION['redir']=curPageURL();//Saving the current page for the redirection
    header('Location: ../Session/loginFrm.php'); 
}

そしてloginFrm.phpでは、次のことを行います。

{...after validation}    
if(isset($_SESSION['redir'])){
        header('Location: '.$_SESSION['redir']);
    }else{...}

このページでは、代わりに次のようなものを使用する必要があると言われています。

 ...
    require_once '../Session/loginFrm.php';
    exit();

これは私には機能しません。セッション変数には、現在のページではなく、含まれているページが含まれるようになりました。

についてどう思いますか?

4

2 に答える 2

2

私は個人的にそれに対してお勧めします。その理由は、コンテンツからURLへのマッピングです。任意のURLにログインページを含めることを許可した場合、検索エンジンはどのようにコンテンツのインデックスを作成することになっていますか(または、URLが渡された場合、状態ごとに異なる出力が得られるため、コンテンツをどのように管理しますか)。

URLはUniformResourceLocatorの略です。これは、リソースへのアクセスを許可することを目的としています。そのため、(個人的に)コンテンツとURLの間で常に1:1のマッピングを使用したいのです(したがって、URL / POST以外のデータに基づいてページに異なるものが表示されないようにします)...

しかし、それは私の$0.02です...

于 2010-06-17T02:15:59.143 に答える
2

彼は重要な情報、つまり実行コンテキストのリセットを省略しています。

リダイレクトを行うと、新しいページが読み込まれ、要求されたページであると見なすことができます。ほとんどのページはそのように書かれており、ほとんどのPHPプログラマーはそのようなページを書いています。また、リダイレクトを通じてコン​​テキストをより適切に制御できることも意味します。

そのトリックをサポートしたい場合はinclude()、含まれているページをまったく異なる方法で作成する必要があります。呼び出し元のファイルからのゴミを含む可能性のある実行コンテキストを継承していることを理解する必要があります。また、ユーザーがブラウザに表示するURLが毎回同じになるとは限らないことも意味します。含まれているページ/ファイルは、POSTターゲットを設定するときにそれを考慮に入れる必要があります(たとえば)。そうしないと、非常に奇妙なエラーが発生します。

彼の推奨の背後にある理由は良いですが、より広い文脈で見る必要があります。主に、リダイレクトを発行する必要がある頻度(ただし、アップストリーム接続の速度も遅い)はどれくらいですか?ログインの自動リダイレクトのように見えるので、私の推測ではそれほど頻繁ではありません。人々はいつもリダイレクトに慣れているので、あなたが過度に目立つことはまずありません。したがって、リダイレクトが問題になるまでこの問題を延期します。

于 2010-06-17T02:28:01.043 に答える