3

これが私の問題です。ローカル関数 (VRC_Header.php) を含むファイルが 1 つあります。ここにあります:

function sec_session_start() {
    $session_name = 'sec_session_id'; //set a custom session name
    $secure = false; //set to true if using https
    $httponly = true; //This stops javascript being able to access the session id

    ini_set('session.use_only_cookies', 1); // Forces sessions to only use cookies
    $cookieParams = session_get_cookie_params(); //Gets currtent cookies params
    session_set_cookie_params($cookieParams["lifetime"], $cookieParams["domain"], $secure, $httponly); 
    session_name($session_name); //Sets the session name to the one set above
    session_start(); //Start the php session
    session_regenerate_id(); //regernates the session, delete the old one
}   

とても簡単です。このファイルをすべての公開ページに含めます。例えば、

include_once('VRC_Header.php');
include_once('../Classes/VRC_MasterOO.php');
include_once('../Classes/VRC_Secure_Login.php');

//Start a secure session
sec_session_start();

ログイン ページとphp処理ページの間で問題が発生しています。送信は、事後操作を介して行われjQueryます。この 2 番目のページには、上記と同じコードが含まれています。

include_once('VRC_Header.php');
include_once('../Classes/VRC_MasterOO.php');
include_once('../Classes/VRC_Secure_Login.php');

//Start a secure session
sec_session_start();

残念ながら、私の jQuery 関数は次のように応答します。

致命的なエラー: sec_session_start() (以前は E:\Additional Programs\xampp\htdocs\Vista_Ridge_Territory_System\PHP\Scripts\VRC_Header.php:14 で宣言されていました) を E:\Additional Programs\xampp\htdocs\Vista_Ridge_Territory_System\PHP\Scripts で再宣言できません\VRC_Header.php 24行目

私のjQuery関数が応答を表示することに注意してください。つまり、問題は2番目のファイルにあると思います。したがって、「再宣言できません」。なぜこうなった?ローカル関数でこの問題が発生したことはありません。

どんな入力でも大歓迎です。

注: 両方のファイルで include 関数を削除しました。その場合、PHP別のエラーがスローされます: " sec_session_start()" は定義されていません。"

中間 jQuery 関数:

$(document).ready(function () {
$('.login-form').submit(function (e) {
    e.preventDefault();
    $('#reply').remove();
    var formData = $(this).serialize();
    $("input").prop("disabled", true);
    request = $.post('VRC_LoginProcess.php', formData, loginMessage);
    request.fail(function() { 
        $('.header').append("<span id=\"reply\">Login Failed. Please try again in a few minutes.</ span>"); });

    function loginMessage(data) {
        $('.header').append("<span id=\"reply\">" + data + "</ span>");
        $("input").prop("disabled", false);
    }
});
});
4

1 に答える 1

4

重要なのは、次のエラー メッセージです。

致命的なエラー: sec_session_start() (以前は E:\Additional Programs\xampp\htdocs\Vista_Ridge_Territory_System\PHP\Scripts\VRC_Header.php:14 で宣言) を E:\Additional Programs\xampp\htdocs\Vista_Ridge_Territory_System\PHP\Scripts で再宣言できません\VRC_Header.php 24行目

このエラーが発生する唯一の方法VRC_Header.phpは、 2 回インクルードした場合です。これは jQuery とは関係なく、セッションやセッション ID の再生成とも関係ありません。2 つの異なる行番号は、関数の開始/終了を指しています。

コマンドを関数の上に置いてみるecho()と、エコーが 2 回発生することがわかります。さらに良いことに、関数の上に次のコードを配置すると、ファイルが 2 回目にどのように含まれているかを確認するのに役立つバックトレースを含む、より有用なエラー メッセージが表示されます。

if (function_exists('sec_session_start')) {
    debug_print_backtrace();
    die('Trying to define sec_session_start() a second time');
}
于 2013-06-29T06:18:30.387 に答える