it-swarm-vi.com

Truy xuất phiên j Joomla từ trong một mô-đun

Tôi đang đặt biến phiên từ tệp bên ngoài bằng ajax:

define( '_JEXEC', 1); 
define( 'DS', DIRECTORY_SEPARATOR );
define( 'JPATH_BASE', realpath(dirname(__FILE__) .'/' ) );
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

$session    = JFactory::getSession();
$mainframe = JFactory::getApplication('site');
$mainframe->initialise();

// $session->clear( 'ss');
if (isset($_POST['v'])) {
$value = filter_input(INPUT_POST, 'v', FILTER_SANITIZE_NUMBER_INT);
$session->set('ss', $value);
$response = $session->get('ss');
// echo $response;
} else {
    echo $session->get('ss');
}

Vì vậy, với việc tôi đang đặt var phiên của mình từ tệp bên ngoài, bây giờ vấn đề tôi gặp phải là truy xuất nó, giả sử bạn cần truy xuất giá trị phiên đó từ tệp trợ giúp:

public function calculation($carreton) {
// lots of line to make some calculations
$session =& JFactory::getSession();
if ($session->get('ss') == 1) {
    $seg = 1000;
    $subtotal_e = $subtotal + $seg;
} else {
 $subtotal_e = 0;
}
// Final results
return $someArrs;
}

Vì vậy, IF a = b đang hoạt động tốt, vấn đề đang truy xuất các giá trị từ phiên mà tôi đã đặt từ tệp bên ngoài ...

Bạn có biết làm thế nào để lấy lại giá trị đó không? /file.php

Có ý kiến ​​gì không?

Cảm ơn bạn.

3
Tanker

Việc bạn sử dụng phiên sai. Nếu bạn theo logic xuống chuỗi lớp cho $mainframe->initialize Bạn sẽ tìm thấy, tùy thuộc vào phiên bản j Joomla của bạn, một dòng như https://github.com/j Joomla/j Joomla -cms/blob/staging/library/j Joomla/application/web.php # L1062

$session = JSession::getInstance($handler, $options);

Cuộc gọi tạo phiên đó chứa các biến trong thẻ tùy chọn xác định tên của cookie được sử dụng cho phiên.

Bằng cách gọi JFactory::getSession() trước khi khởi tạo, bạn đã tạo một phiên có nhiều khả năng có tên cookie hoặc số id khác. Thay vào đó hãy sử dụng

$mainframe = JFactory::getApplication('site');
$mainframe->initialise();
$session    = $mainframe->getSession();
3
garyamort

Thử đi!

$session   =& JFactory::getSession();

$mainframe = JFactory::getApplication('site');
0
Doungdara

Nếu bạn bật gỡ lỗi từ tab hệ thống trong cấu hình toàn cầu của mình, bạn sẽ có thể thấy những gì bạn có trong phiên trong bảng gỡ lỗi ở cuối màn hình.

Tôi sẽ tránh sử dụng một tập tin bên ngoài, tại sao không sử dụng một chức năng trong bộ điều khiển để thực hiện cuộc gọi ajax thay thế?

0
patterncatcher