Witam,
Trafiłem na taki problem: mam napisaną własną procedurę obsługi sesji, która zapisuje zmienne w bazie danych MySQL. Procedura działa bardzo dobrze w normalnym php, natomiast w momencie, w którym do gry wchodzi AJAX, nie jest przekazywany identyfikator, ani żadne zmienne. Nawet próby przekazania identyfikatora w zmiennej kończą się tym, że owszem, procedura odczytuje wszystkie dane z bazy, sesja dostaje właściwy identyfikator, ale tablica zmiennych $_SESSION jest pusta (i potem pusta zostaje zapisana do bazy, kasując całą sesję).
W momencie, w którym korzystam ze standardowego mechanizmu obsługi sesji, wszystko hula.
Czy ktoś jeszcze się natknął na podobny problem? Używam php 5.2.3.
Obsługa sesji (session.inc):
class Session {
.
.
.
function read($id) {
$id = $this->dbHandle->getSQLValues($id);
$data = $this->dbHandle->loadObject("SELECT data FROM wmh_sessions WHERE id = $id", false);
return '';
}
function verify() {
if ((!isset($_SESSION['token']))||($_SESSION['token']!=md5($_SERVER['HTTP_USER_AGENT'].HASH_SECURE
))) { }
}
.
.
.
}
$Session_class = new Session();
array(&$Session_class, 'close'), array(&$Session_class, 'read'), array(&$Session_class, 'write'), array(&$Session_class, 'destroy'), array(&$Session_class, 'clean'));
ini_set('session.use_only_cookies',false); ini_set("session.use_trans_sid", false); ini_set('session.auto_start', false); ini_set('register_long_arrays',true);
if (isset($_GET['sid']) || isset($_POST['sid'])) { //prevent hijacking $s = (isset($_GET['sid'])) ?
$_GET['sid'] : $_POST['sid']; $Session_class->verify();
} else
Zabezpieczenie w pliku przed nieautoryzowanym dostępem:
require_once('../../config/config.inc');
require_once($rootDir.'classes/session.inc');
if (!isset($_SESSION['uname'])) { echo '<p>Nieautoryzowany dostęp</p>'; }
Wywołanie AJAXa z JQuery:
<script type="text/javascript"> $("#sortable").sortable({ opacity: 0.6, cursor: 'move', update: function() {
var sid = '<?php echo session_id() ?>';
var order = $(this).sortable("serialize") + '&sid=' + sid + '&act=rearrange&n=0';
$.post("host/models/menuManipulation.php", order, function(theResponse){
$("#message").html(theResponse);
});
}
});