Abyście dobrze zrozumieli problem, konieczne jest jego dość dokładne (choć postaram się to zrobić zwięźle) opisanie.

Mam skrypt, którego jedną z możliwości jest wysłanie wiadomości do mnie (wiadomość jest zapisywana w bazie, oraz wysyłana przez maila). Aby zabezpieczyć się przed spamem (głównie z uwagi na wysyłanie maili), korzystam z prostej captchy (s3capcha).
Ogółem wszystkie zadania wykonywane są przez AJAX. W tym wypadku, user wpisuje swój nick (lub imię), może wpisać swój adres e-mail, oraz treść wiadomości. Następnie wybiera przedmiot, o który jest proszony i wciska Send Message. Kod odpowiedzialny za początkowe wyświetlanie jest taki:

<div id="capcha"><? include('s3Capcha.php'); ?></div>

I tu, wszystko jest w porządku. Odpowiednie przyciski się pojawiają i nie ma żadnych błędów.
Gdy użytkownik wyśle formularz, jest on za pomocą ajaxa wysyłany do pliku sendMessage.php, który po przeprowadzeniu weryfikacji treści i kodu zabezpieczeń, zapisuje wiadomość w bazie i wysyła maila. Następnie usuwa z sesji pzrechowywaną wartość capchy i zwraca dane w postaci json (result: 200), że wysyłka się powiodła.
Na tej podstawie, javascript wykonuje następujące zadania:

  • wyświetla informacje o powodzeniu wysyłki
  • wysyła żądanie do pliku s3Capcha.php w celu wygenerowania nowej capchy, czy też raczej nowego identyfikatora
  • zamienia dotychczasową zawartość #capcha na treść zwróconą przez s3Capcha.php
    Kod jquery:
$.ajax({
					url: 's3Capcha.php',
					timeout: 1500,
					type: 'GET'
				}).done(function(e){
					$('#capcha').html(e);
					$('#capcha').s3Capcha();
				});

taka próba wczytania pliku jest prawidłowa, ale zawsze zwracany jest komunikat o którym mowa w temacie. Oczywiście przed session_start() NIE MA KOMPLETNIE NIC poza takiem php. Przed tagiem php nie ma żadnego białego znaku.

Niestety, session_start() na początku być musi, bo inaczej nie jestem w stanie wygenerować nowego identyfikatora i tym samym nie ma możliwości wysłania kolejnej wiadomości bez odświeżenia strony.

Początek Pliku s3Capcha.php

<?php
//if (!isset($_GET['recapcha']))
session_start();
include("s3Config.php");

Przypuszczam, że problemem jest tu to, że jquery wysyła żądanie do pliku, który wcześniej był wczytany przez include w php, chociaż sensu większego to nie ma, bo przecież jest to osobne żądanie (wcześniejsze zostało już zakończone).

Jest jakiś sposób, aby to obejść?
Dodam, że niezależnie od wyświetlanego błędu, nowa capcha jest geneowana prawidłowo

zamiana znacznika <code class="js"> na <code class="javascript"> - @furious programming