0

したがって、開発に使用するテスト環境と、最終的にコードをデプロイする本番環境があります。私が現在持っているコードは、テスト環境では機能しますが、実稼働環境では機能しません。環境の問題のようですが、そうであればどの設定を変更すればよいかわかりません。

現在、短いフォームとキャプチャ画像を持つ単純な連絡先ページをテストしようとしています。連絡先ページでは、captcha イメージに表示されている security_code を含むセッション変数を設定します。これにより、contactSanitize と呼ばれる次のページで、セッションからその変数を読み取り、ユーザーが正しいコードを入力したことを確認できます。

繰り返しますが、これはテスト環境で正常に機能します。ただし、実稼働環境では、フォームに入力して送信できますが、その時点でセッション データが失われ、入力したコードが表示されないため、contactSanitize ページから連絡先ページに戻されます。

私はこれらのページのどこにも session_destroy 呼び出しを持っておらず、誤って $_SESSION 変数を空の配列やその他のものに設定していません (私はダブルとトリプルをチェックしました - テスト環境でも動作するので、そうじゃない)

以下は私のログの抜粋です。各行には、コメントに加えて、タイムスタンプと、利用可能な場合はセッション ID が含まれています。実際、contactSanitize のセッション ID は同じであることがわかります。これは、セッション自体が何らかの理由で空になっているだけです。

これは contact.php ページです。

DEBUG  2013-04-04 18:23:07 (varsAndSecurityCheck.php:74) Page requires security, checking to see if authenticated user.
DEBUG c744b62f483d1eb02fafbbd11f9e9bdb 2013-04-04 18:23:07 (varsAndSecurityCheck.php:82) authenticated = false
DEBUG c744b62f483d1eb02fafbbd11f9e9bdb 2013-04-04 18:23:09 (contact.php:130) just before security image
DEBUG c744b62f483d1eb02fafbbd11f9e9bdb 2013-04-04 18:23:09 (contact.php:134) invoking security image functions
DEBUG c744b62f483d1eb02fafbbd11f9e9bdb 2013-04-04 18:23:09 (CaptchaSecurityImages.php:42) code: hwjdtvw7
DEBUG c744b62f483d1eb02fafbbd11f9e9bdb 2013-04-04 18:23:09 (contact.php:137) after security image functions, SESSION: Array
(
    [security_code] => hwjdtvw7
)
DEBUG c744b62f483d1eb02fafbbd11f9e9bdb 2013-04-04 18:23:09 (contact.php:152) Just after security image

フォームを送信し、contactSanitize.php に移動してユーザー入力を検証します。

DEBUG  2013-04-04 18:23:24 (varsAndSecurityCheck.php:74) Page requires security, checking to see if authenticated user.
DEBUG c744b62f483d1eb02fafbbd11f9e9bdb 2013-04-04 18:23:24 (varsAndSecurityCheck.php:82) authenticated = false
DEBUG c744b62f483d1eb02fafbbd11f9e9bdb 2013-04-04 18:23:26 (contactSanitize.php:8) SESSION: Array
(
)

上記のように、セッションが空であるため、検証は失敗します。

DEBUG c744b62f483d1eb02fafbbd11f9e9bdb 2013-04-04 18:23:26 (contactSanitize.php:26) No security code and not authenticated, sending to contact page.
DEBUG  2013-04-04 18:23:26 (varsAndSecurityCheck.php:74) Page requires security, checking to see if authenticated user.
DEBUG c744b62f483d1eb02fafbbd11f9e9bdb 2013-04-04 18:23:26 (varsAndSecurityCheck.php:82) authenticated = false

新しいセキュリティ コードが生成される contact.php ページに戻ります。

DEBUG c744b62f483d1eb02fafbbd11f9e9bdb 2013-04-04 18:23:29 (contact.php:130) just before security image
DEBUG c744b62f483d1eb02fafbbd11f9e9bdb 2013-04-04 18:23:29 (contact.php:134) invoking security image functions
DEBUG c744b62f483d1eb02fafbbd11f9e9bdb 2013-04-04 18:23:29 (CaptchaSecurityImages.php:42) code: xb66q6jy
DEBUG c744b62f483d1eb02fafbbd11f9e9bdb 2013-04-04 18:23:29 (contact.php:137) after security image functions, SESSION: Array
(
    [security_code] => xb66q6jy
)
DEBUG c744b62f483d1eb02fafbbd11f9e9bdb 2013-04-04 18:23:29 (contact.php:152) Just after security image

編集

session_start 呼び出しが両方のページの先頭で発生することを示すために、ログを追加しました。次の行が contact および contactSanitize ページの先頭に表示されるようになりました。

DEBUG  2013-04-04 19:26:15 (varsAndSecurityCheck.php:74) Page requires security, checking to see if authenticated user.
DEBUG  2013-04-04 19:26:15 (varsAndSecurityCheck.php:78) page is secure, starting session now.

これは、varsAndSecurityCheck.php ページからの小さなスニペットで、「セッションの開始」というログがどこから来たかを示しています。

$log->debug("page is secure, starting session now.");
session_start();

以下は、contact.php のコードの関連部分です。

<?php
    ...
    //session is started by this first include when secure connection is verified
    include_once "../includes/varsAndSecurityCheck.php";
    //this just connects to my database, no session manipulation here
    include_once "../includes/dbConnect.php";
    //this includes some functions for generating a captcha image
    include_once "../captcha/CaptchaSecurityImages.php";

    //this is just including some basic styling and navigation  
    include '../includes/header.php';
?>
...
    <form method="post" action="contactSanitize.php">
    ...
            $log->debug("just before security image");
        ?>
            <div class="centerText">
                <?php
                    $log->debug("invoking security image functions");
                    $_SESSION['security_code'] = generateCode(8);
                    $log->debug("after security image functions, SESSION: ".print_r($_SESSION,true));
                ?>  
                <?=captchaSecurityImages($_SESSION['security_code'],320,70)?>

            </div>
            ...
            <div class="centerText">
                <input id="security_code" name="security_code" type="text" maxlength="8" />
                <br><br>
                <input type="submit" name="submit" value="Send Message" class='generalFormButton' />
            </div>
        <?
            $log->debug("Just after security image");
        }

        ?>

これは私の contactSanitize ページの最初の部分です。最初の条件で失敗することがわかります。

<?php

//this starts the session when secure connection is made
include_once "../includes/varsAndSecurityCheck.php";
//This connects to database, no session manipulation here
include_once "../includes/dbConnect.php";
//This includes some e-mail functions, no session manipulation
include_once '../includes/mail.php';

$log->debug("SESSION: ".print_r($_SESSION,true));


$_SESSION['formData'] = array('visitor_name' => $_POST['visitor_name'],
                'visitor_email' => $_POST['visitor_email'],
                'ReasonForContacting' => $_POST['ReasonForContacting'],
                'message_body' => $_POST['message_body']
            );

if(!isset($_SESSION['security_code']) && !$authenticated)
{
    $log->debug("No security code and not authenticated, sending to contact page.");
    $_SESSION['contactError'] = "You must type the security code before sending a message.";
    header("Location: contact.php");
    exit();
}
...
4

1 に答える 1

0

私の最後のコメントによると、「セッション保存パス」が正しく設定されておらず、ホスティングプロバイダーによって修正されました。

于 2013-06-02T01:52:10.957 に答える