0

現在、リダイレクトにSESSION変数を使用しています。うまくいけば、コードスニペットがそれを明確にするでしょう。

addForm.php:

if (!isset($_SESSION['myusername'])){
            if (isset($_COOKIE['username'])){   
                $_SESSION['myusername'] = $_COOKIE['username'];

            }
        else{   
                #using a session var to redirect back to addForm.php
                $_SESSION['addForm'] = 1;
                header("location:loginForm.php");       
            }
}

LoginSuccess.php

session_start();
if (!isset($_COOKIE['username'])){

    header("location:loginForm.php");
}
if (isset($_SESSION['addForm'])){
    header("location:addForm.php");
}

上記は機能します(addForm.phpにリダイレクトされます)。私の質問は、このようにすることにはリスクがありますか?それを行うためのより良い方法はありますか?私は「ベストプラクティス」を探していると思います。

4

2 に答える 2

1

いくつかのエラーがあります:

  1. 有効なヘッダーはheader('Location: http://www.example.org/script.php');通知Lと完全なURLですか?
  2. それぞれの後にheader('Location: http://www.example.org/script.php');それはする必要がありますexit();
  3. あなたはただ頼ることはできません$_COOKIE['username']、あなたはパスワードから何かを持っている必要があります、私はパスワードではないことを意味します、多分MD5()ハッシュされたパスワード$_COOKIEも。そして、あなたはそれほど頼らないことを知っているべき$_COOKIEです。
  4. リダイレクトの前に行う必要LoginSuccess.phpがありますが、セッションからは引き続き設定されます。unset($_SESSION['addForm'])addForm
于 2012-08-27T08:08:43.157 に答える
1

個人的には、エントリの現在のURIをセッション変数に格納することをお勧めします。次に、ログインプロセスが成功すると、保存されているURIを使用して、ユーザーを前のページにリダイレクトします。

擬似コード


    if (!isset($_SESSION['userloginobj'])) {
        $_SESSION['callbackuri'] = get_current_url_depending_of_your_process();
        header('location:' . get_base_url() . 'index.php?do=login');
        exit(0);
    }
    elseif ('login' == get_param('do')) {
        // Show the login form

        if ( is_login_successfull() ) {
             $_SESSION['userloginobj'] = "userinfo";
             header('location:' . $_SESSION['callbackurl']);
             exit(0);
        }
    }
    else {
        // Normal process
    }

しかし、フレームワークを使用しない場合、プロセスは良いスタートのようです。

于 2012-08-27T08:13:03.190 に答える