Я использовал D для своего исследовательского проекта при разработке глобального алгоритма оптимизации. Я применил его к проблеме учебных нейронных сетей. Вам решать, ли Вы хотите назвать этот "реальный мир".
Обычно идентификатор сеанса не читается из POST. You could do this:
$_COOKIE['PHPSESSID'] = $_POST['PHPSESSID'];
session_start();
В настоящее время у меня аналогичная проблема с сеансами uploadify + PHP.
Используя error_log (), я могу отслеживать, что когда приложение uploadify flash отправляет данные файла на сервер, оно передает правильный session_id в сценарий загрузки:
'scriptData': {'session_id': session_id},
(session_id, установленный ранее: var session_id = '';)
Итак, это позволяет мне проверить, что да , идентификатор сеанса для моих страниц и идентификатор сеанса для сценария загрузки фактически одинаковы.
Но, когда сценарий запускается, я запускаю сеанс с помощью:
session_id ($ session_id); session_start ();
Каким-то образом ВСЕ данные сеанса уничтожены (я также установил данные сеанса в массив, чтобы я мог обновлять и наблюдать, как данные растут с каждым запросом, а затем, когда я использую uploadify, они стираются).
Я понятия не имею, как это отладить: /
edit: suhosin может разрушать сеанс:
вы не можете решить эту проблему, потому что uploadify имеет собственный идентификатор сеанса, который создается флэш-плеером. Другими словами, флэш-плеер обращается к скрипту uploadify как новый пользователь и получает новый сеанс. Единственный способ решить эту проблему - передать идентификатор сеанса текущей страницы через post в сценарий uploadify.
я нашел решение, которое намного легче реализовать, особенно если у вас уже есть ориентированный на сессию бэкенд PHP для входа в систему и т.д.:
просто пишут следующий код в положении jQuery:
'script' : '/upload.php?<?= session_name(); ?>=<?= session_id(); ?>',
, который волшебно присоединит ваше текущее имя сессии и ваш идентификатор сессии.
Это может сработать, но с точки зрения безопасности это действительно плохая практика. Это позволило бы любому, у кого есть действительный идентификатор сеанса, выдать себя за этот сеанс, просто изменив идентификатор сеанса. Было бы лучше сделать даже базовое синхронное шифрование сеанса с секретным ключом (известным только внутреннему коду), а затем расшифровать его с помощью скрипта upload.php.
Добавьте это перед вашим внешним .js файлом с реализацией uploadify.
<!-- Get sesssionId -->
<script type="text/javascript" charset="utf-8">
var sessionId = "<?php echo session_id(); ?>";
</script>
Затем добавьте это в скрипт uploadify.
$('#uploadify').uploadifySettings('scriptData', {'sessionId': sessionId});
Это нужно скрипту PHP uploadify.
// Start session
session_id($_POST['sessionId']);
session_start();
Все готово!
$(document).ready(function() {
nombre = $('#uploadify1').val(); //first input
autor = $('#uploadify1').val(); // second one
$("#uploadify").uploadify({
'uploader' : UPLOADIFY_URL+'scripts/uploadify.swf',
'script' : 'ticket_docs_uploadify.php',
'cancelImg' : UPLOADIFY_URL+'cancel.png',
'folder' : 'ticket_document_uploads',
'queueID' : 'fileQueue',
'checkScript' : 'ticket_docs_check.php?nombre='+nombre+'&autor='+autor,
'fileDesc' : 'I am testing uploadify',
'buttonText' : 'Upload',
'scriptData' : {'sessTempTickedId': '<?php echo $_SESSION['sessTempTickedId'];?>', 'pkEmployeeID': '<?php echo $_SESSION['pkEmployeeID'];?>', 'EmployeeDepartment': '<?php echo $_SESSION['EmployeeDepartment'];?>' },
'auto' : false,
'multi' : true,
'onComplete' : function(a, b, c, d, e){
//alert(a+b+c+d+e);
},
'onAllComplete': function(event,data){
//something here alert('asdasd'); alert(json_decode(data));
}
});
});
<?php include_once('../../common/inc/connectdb.inc.php');
if (!empty($_FILES))
{
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';
//change the file name here
$fileName = time();
$arrFile = pathinfo($_FILES['Filedata']['name']);
$strFileExt = strtolower($arrFile['extension']);
$strFileName = $arrFile['filename'];
$strFileBaseName = $arrFile['basename'];
$fileName = $fileName.'.'.$strFileExt;
$targetFile = str_replace('//','/',$targetPath) . $fileName;
$sql = "INSERT INTO ticket_documents (fkTicketID,fkEmployeeID,fkDepartmentID,TicketDocumentName,TicketDocumentLabel) VALUES ('".$_POST['sessTempTickedId']."','".$_POST['pkEmployeeID']."','".$_POST['EmployeeDepartment']."','".$fileName."','".$_FILES['Filedata']['name']."')";
mysql_query($sql) or die(mysql_error());
move_uploaded_file($tempFile,$targetFile);
echo "1";
}
?>