Szukam już jakiś czas i trochę podobnych tematów znalazłem, ale całościowo nie jest to chyba omówione, więc może ktoś bardziej doświadczony pomoże w rozwiązaniu takiego problemu:
Próbuję postawić na bezpłatnym hostingu niekomercyjny serwis, na localhoście mi to nawet chodziło, a po wrzuceniu na zdalny pojawił sie problem.
znika mi $_SESSION!. A wygląda to tak:
na ty hostingu https realizowane jest za pomocą serwera proxy (czyli normalnie URL mam http://www.moja-domena.pl/index.php/, a dla SSL taki https://ssl.jakis-serwer.pl/moja-domena.pl/index.php/).
Logowanie przebiega prawidłowo (z https), po zalogowaniu ustawiam $_SESSION['costam'] i wszystko gra do momentu, kiedy chcę udostępnić podstronę przez http, ale bez wylogowania. $_SESSION['costam'] jest wtedy pusta i nie wyświetla się w związku z tym np. panelu logowania właściwy dla zalogowanego użytkownika. - wskakuje mi panel przeznaczony do logowania. Po powrocie do https (klikając np. w rzeczonym panelu załóż konto) mam znowu dostęp do $_SESSION['costam'] i wszystko na stronie wraca do normy, do czasu aż wychodzę z https, czyli ruch nie idzie przez serwer proxy (ssl.jakis-serwer.pl). Problem sprowadza się więc do tego, żeby uzyskać dostęp do zmiennej $_SESSION['costam'] nie tylko kiedy w pasku przeglądarki mam https://ssl.jakis-serwer.pl/moja-domena.pl/...egisterCustomer, ale też wtedy kiedy mam http://www.moja-domena.pl/index.php?artykul=1
Na podstawie różnych materiałów napisałem coś takiego:
CODE
mysql_connect("localhost", "root", "");
mysql_select_db("sesje_test");
function sesja_open($lokalizacja, $nazwa_sesji) {
return true;
}
function sesja_close() {
return true;
}
function sesja_read($id_sesji) {
$result = mysql_query("SELECT Dane FROM sesje WHERE IDsesji = '$id_sesji';");
$biezacyCzas = time();
if (!mysql_num_rows($result)) {
mysql_query("INSERT INTO sesje (IDsesji, dodano)
VALUES ('$id_sesji', $biezacyCzas);");
return '';
} else { extract(mysql_fetch_array($result), EXRT_PREFIX_ALL, 'sesja');
mysql_query("UPDATE sesion SET dodano = $biezacyCzas
WHERE IDsesji = '$id_sesji';");
return $daneSesji;
}
}
function sesja_write($id_sesji, $data) {
$biezacyCzas = time();
mysql_query("UPDATE sesion SET Dane = '$data', dodano = $biezacyCzas
WHERE IDsesji = $id_sesji';");
return true;
}
function sesja_destroy($id_sesji) {
mysql_query("DELETE FROM sesion WHERE IDsesji = $id_sesji';");
return true;
}
function sesja_gc($czasTrwania) {
$biezacyCzas = time();
mysql_query("DELETE FROM sesion WHERE dodano + $czasTrwania < $biezacyCzas;");
return true;
}
session_set_save_handler("sesja_open", "sesja_close", "sesja_read", "sesja_write", "sesja_destroy", "sesja_gc");
session_start();
$_SESSION['pierwsza'] = 'pierwsza';
print "kawałek tekstu <br />";
$_SESSION['druga'] = 'druga';
print " <br />" . $_SESSION['druga'];
?>
mysql_select_db("sesje_test");
function sesja_open($lokalizacja, $nazwa_sesji) {
return true;
}
function sesja_close() {
return true;
}
function sesja_read($id_sesji) {
$result = mysql_query("SELECT Dane FROM sesje WHERE IDsesji = '$id_sesji';");
$biezacyCzas = time();
if (!mysql_num_rows($result)) {
mysql_query("INSERT INTO sesje (IDsesji, dodano)
VALUES ('$id_sesji', $biezacyCzas);");
return '';
} else { extract(mysql_fetch_array($result), EXRT_PREFIX_ALL, 'sesja');
mysql_query("UPDATE sesion SET dodano = $biezacyCzas
WHERE IDsesji = '$id_sesji';");
return $daneSesji;
}
}
function sesja_write($id_sesji, $data) {
$biezacyCzas = time();
mysql_query("UPDATE sesion SET Dane = '$data', dodano = $biezacyCzas
WHERE IDsesji = $id_sesji';");
return true;
}
function sesja_destroy($id_sesji) {
mysql_query("DELETE FROM sesion WHERE IDsesji = $id_sesji';");
return true;
}
function sesja_gc($czasTrwania) {
$biezacyCzas = time();
mysql_query("DELETE FROM sesion WHERE dodano + $czasTrwania < $biezacyCzas;");
return true;
}
session_set_save_handler("sesja_open", "sesja_close", "sesja_read", "sesja_write", "sesja_destroy", "sesja_gc");
session_start();
$_SESSION['pierwsza'] = 'pierwsza';
print "kawałek tekstu <br />";
$_SESSION['druga'] = 'druga';
print " <br />" . $_SESSION['druga'];
?>
dołożyłem w bazie tabelę
CODE
CREATE TABLE sesje
(ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY, IDsesji CHAR (26),
Dane Text DEFAULT '',
dodano INT);
(ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY, IDsesji CHAR (26),
Dane Text DEFAULT '',
dodano INT);
i w osobnym pliku mi to działa, ale różne próby zastosowania w praktyce się nie powiodły. Będę wdzięczny za wszelkie sugestie, myślę że na ten problem wcześniej czy później natknie się wiele osób, więc rozwiązanie posłuży nie tylko mnie, pozdrawiam Wszystkich.