0

メインサーバーからアクセスできるosCommerceプロジェクトに取り組んでいますが、ローカルホストでプロジェクトの管理者部分にアクセスしようとすると、ログインページはログインを受け入れます。理想的には、ログインを受け入れてインデックスにリダイレクトする必要があります。 、php..以下は私が使用しているログインスクリプトです。

<?php
  require('includes/application_top.php');

  if ($session_started == false) {
  echo 'session not started';
  }

  $error = false;
  if (isset($HTTP_GET_VARS['action']) && ($HTTP_GET_VARS['action'] == 'process')) {
    $email_address = tep_db_prepare_input($HTTP_POST_VARS['email_address']);
    $password = tep_db_prepare_input($HTTP_POST_VARS['password']);

// Check if email exists
    $check_admin_query = tep_db_query("select admin_id as login_id, admin_groups_id as login_groups_id, admin_firstname as login_firstname, admin_email_address as login_email_address, admin_password as login_password, admin_modified as login_modified, admin_logdate as login_logdate, admin_lognum as login_lognum from " . TABLE_ADMIN . " where admin_email_address = '" . tep_db_input($email_address) . "'");
    if (!tep_db_num_rows($check_admin_query)) {
      $HTTP_GET_VARS['login'] = 'fail';
    } else {
      $check_admin = tep_db_fetch_array($check_admin_query);

      //BOF code for cPanel installer - convert password to cre hash
      $check_password = $check_admin['login_password'];
      if (substr($check_password, 0, 8) == '_cPanel_'){
        $check_password = substr($check_password, 8);
        $password_hash = tep_encrypt_password($check_password);
        tep_db_query("UPDATE " . TABLE_ADMIN . " SET admin_password = '" . $password_hash . "'");
        $check_admin_query = tep_db_query("select admin_id as login_id, admin_groups_id as login_groups_id, admin_firstname as login_firstname, admin_email_address as login_email_address, admin_password as login_password, admin_modified as login_modified, admin_logdate as login_logdate, admin_lognum as login_lognum from " . TABLE_ADMIN . " where admin_email_address = '" . tep_db_input($email_address) . "'");
        $check_admin = tep_db_fetch_array($check_admin_query);
      }
      //EOF code for cPanel installer - convert password to cre hash

      // Check that password is good
      if (!tep_validate_password($password, $check_admin['login_password'])) {
        $HTTP_GET_VARS['login'] = 'fail';
      } else {
        if (tep_session_is_registered('password_forgotten')) {
          tep_session_unregister('password_forgotten');
        }

        $login_id = $check_admin['login_id'];
        $login_groups_id = $check_admin[login_groups_id];
        $login_firstname = $check_admin['login_firstname'];
        $login_email_address = $check_admin['login_email_address'];
        $login_logdate = $check_admin['login_logdate'];
        $login_lognum = $check_admin['login_lognum'];
        $login_modified = $check_admin['login_modified'];

        tep_session_register('login_id');
        tep_session_register('login_groups_id');
        tep_session_register('login_firstname');

        //$date_now = date('Ymd');
        tep_db_query("update " . TABLE_ADMIN . " set admin_logdate = now(), admin_lognum = admin_lognum+1 where admin_id = '" . $login_id . "'");

        if (($login_lognum == 0) || !($login_logdate) || ($login_email_address == 'admin@localhost') || ($login_modified == '0000-00-00 00:00:00')) {
          tep_redirect(tep_href_link(FILENAME_ADMIN_ACCOUNT, '', 'SSL'));
        } else {
          tep_redirect(tep_href_link(FILENAME_DEFAULT, '', 'SSL'));
        }

      }
    }
  }

  require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_LOGIN);
  include('includes/functions/rss2html.php');
?>

問題を追跡しようとしましたが、正しい電子メールとパスワードでログインしても、「$HTTP_GET_VARS['action']」が表示されません。

誰かがここで何がうまくいかないのか教えてもらえますか?

最初の返信によると

ローカルホストでregister_long_arraysを有効にしていますが、メールアドレスとパスワードを間違って入力した場合でも非常にうまく機能しています。

4

4 に答える 4

2

このような変数はlong-arrayHTTP_GET_VARSと呼ばれ、非推奨になりました-無効にすることができます。 これについては、ディレクティブを参照してください:サーバーで無効になっている可能性がありますか?
register_long_arrays


の代わりに、スーパーグローバル配列$HTTP_GET_VARSを使用する必要があります。$_GET

いくつかの参考資料については、以下を参照してください。


注:OSコマースは非常に古いソフトウェアであり、長い配列が非推奨になる前に開発されました。これがおそらくそれらが使用される理由です...そしてregister_long_arraysPHPの構成でディレクティブを有効にできる理由です。

もちろん、これは新しいソフトウェアにはお勧めできません...しかし、それを使用する必要がある場合は...のすべてのインスタンスを置き換えるよりも簡単な場合があります$HTTP_GET_VARS

于 2010-06-21T11:27:39.880 に答える
0

$ HTTP_GET_VARSは古く、非推奨です。代わりに$_GETを使用してください。同じことが他のスーパーグローバルにも当てはまります:$ _ POST、$ _ REQUEST、$ _ SERVER、$ _ COOKIES、$_FILESなど。

于 2010-06-21T11:27:20.590 に答える
0

$_GET['action']$の代わりに試してくださいHTTP_GET_VARS['action']。完全にに置き換えることをお勧めし$HTTP_GET_VARSます$_GET

PHP 5.0.0以降、長いPHPの事前定義された変数配列は、register_long_arraysディレクティブで無効にできます。

于 2010-06-21T11:27:33.977 に答える
0

PHP 5.0.3 から、長い定義済み配列HTTP_GET_VARSはデフォルトで無効になりました。代わりにこれを使用してください:

$_GET['action'];
于 2010-06-21T11:29:50.307 に答える