Używam klasy o nazwie Securimage do generowania kodu zabezpieczającego przed spam botami (w tym konkretnym przypadku jest to formularz kontaktowy). I mam problem, który polega na tym, że skrypt generujący ów kod nadpisuje sesję, w której znajdują się informacje dotyczące produktów w koszyku. Obrazowując tę sytuację, klient sklepu internetowego dodaje jakiś produkt do koszyka, następnie przechodzi do formularza kontaktowego i w tym miejscu sesja z produktem zostaje nadpisana przez sesję z klasy Securimage, co skutkuje tym że koszyk jest opróżniany. Moje pytanie brzmi: czy istnieje jakieś sensowne rozwiązanie, które pozwoli na współdziałanie tych 2 sesji?
Poniżej fragmenty kodu:
kontakt.php
Kod
<?php
$dirLib = 'lib';
$dirImage = 'galeria/image';
$dirThumb = 'galeria/thumb';
require_once("$dirLib/main.php");
require_once("$dirLib/dzialy.lib.php");
require_once("$dirLib/dzialLista.lib.php");
require_once("$dirLib/menu_.lib.php");
require_once("$dirLib/user.lib.php");
require_once("$dirLib/dbConnect.php");
require_once("$dirLib/textFromDB.php");
require_once("$dirLib/koszyk.lib.php");
require_once("$dirLib/basicHTMLfunc.php");
require_once("$dirLib/sendMail.php");
require_once("$dirLib/securimage/securimage.php");
if (!($db = dbConnect())) {
echo htmlHeader();
echo htmlError('Problem z połączeniem z bazą danych.');
echo htmlFooter();
die();
}
$securimage = new Securimage();
sslJump();
mySession('sklep');
if ($_SESSION['user']) {
$user = $_SESSION['user'];
} else {
$user = NULL;
}
if ($_SESSION['koszyk']) {
$koszyk = $_SESSION['koszyk'];
} else {
$koszyk = NULL;
}
$dzialy = new Dzialy();
$tekst = '';
if (isset($_GET['sendmail'])) {
$captcha_code = $securimage->check($_POST['captcha_code']);
$result = send_mail($captcha_code);
switch ($result) {
case -2:
$tekst .= htmlError('Wprowadzony kod z obrazka jest nieprawidłowy.');
break;
case -1:
$tekst .= htmlError('Wypełnij odpowiednie pola formularza.');
break;
case 0:
$tekst .= htmlError('Problem z wysłaniem wiadomości.');
break;
case 1:
$tekst .= htmlInfo('Wiadomość została wysłana.');
break;
case 2:
$tekst .= htmlError('Wprowadzony adres e-mail jest nieprawidłowy.');
break;
}
}
$tekst .= userMailFormB();
echo htmlHeader();
echo htmlTop();
echo htmlContentBegin();
echo htmlShowArtNoH(tekstFromDB('kontakt'));
echo $tekst;
echo htmlContentEnd();
echo htmlFooter();
?>
$dirLib = 'lib';
$dirImage = 'galeria/image';
$dirThumb = 'galeria/thumb';
require_once("$dirLib/main.php");
require_once("$dirLib/dzialy.lib.php");
require_once("$dirLib/dzialLista.lib.php");
require_once("$dirLib/menu_.lib.php");
require_once("$dirLib/user.lib.php");
require_once("$dirLib/dbConnect.php");
require_once("$dirLib/textFromDB.php");
require_once("$dirLib/koszyk.lib.php");
require_once("$dirLib/basicHTMLfunc.php");
require_once("$dirLib/sendMail.php");
require_once("$dirLib/securimage/securimage.php");
if (!($db = dbConnect())) {
echo htmlHeader();
echo htmlError('Problem z połączeniem z bazą danych.');
echo htmlFooter();
die();
}
$securimage = new Securimage();
sslJump();
mySession('sklep');
if ($_SESSION['user']) {
$user = $_SESSION['user'];
} else {
$user = NULL;
}
if ($_SESSION['koszyk']) {
$koszyk = $_SESSION['koszyk'];
} else {
$koszyk = NULL;
}
$dzialy = new Dzialy();
$tekst = '';
if (isset($_GET['sendmail'])) {
$captcha_code = $securimage->check($_POST['captcha_code']);
$result = send_mail($captcha_code);
switch ($result) {
case -2:
$tekst .= htmlError('Wprowadzony kod z obrazka jest nieprawidłowy.');
break;
case -1:
$tekst .= htmlError('Wypełnij odpowiednie pola formularza.');
break;
case 0:
$tekst .= htmlError('Problem z wysłaniem wiadomości.');
break;
case 1:
$tekst .= htmlInfo('Wiadomość została wysłana.');
break;
case 2:
$tekst .= htmlError('Wprowadzony adres e-mail jest nieprawidłowy.');
break;
}
}
$tekst .= userMailFormB();
echo htmlHeader();
echo htmlTop();
echo htmlContentBegin();
echo htmlShowArtNoH(tekstFromDB('kontakt'));
echo $tekst;
echo htmlContentEnd();
echo htmlFooter();
?>
securimage.php
Kod
<?php
function Securimage()
{
if ( session_id() == '' ) { // no session has been started yet, which is needed for validation
session_start();
}
}
?>
function Securimage()
{
if ( session_id() == '' ) { // no session has been started yet, which is needed for validation
session_start();
}
}
?>
main.php
Kod
<?php
function mySession($myname) {
session_save_path(dirname($_SERVER['SCRIPT_FILENAME']).'/tmp');
ini_set("session.gc_maxlifetime","7200");
ini_set("session.gc_probability","100");
ini_set("session.name","sid$myname");
ini_set("session.cookie_lifetime","0");
@session_start();
if (!isset($_SESSION["started$myname"])) {
@session_regenerate_id();
$_SESSION["started$myname"] = 1;
}
}
?>
function mySession($myname) {
session_save_path(dirname($_SERVER['SCRIPT_FILENAME']).'/tmp');
ini_set("session.gc_maxlifetime","7200");
ini_set("session.gc_probability","100");
ini_set("session.name","sid$myname");
ini_set("session.cookie_lifetime","0");
@session_start();
if (!isset($_SESSION["started$myname"])) {
@session_regenerate_id();
$_SESSION["started$myname"] = 1;
}
}
?>
Proszę Was o pomoc.