Вопрос как бы сделать авторизацию с первого раза через PHPSESSID?
Нужно авторизовать содержимое Flash на AS3, кнопку на сайте, кнопка это загрузчик файлов.
Получается авторизоваться только со второго раза, так как Flash имеет свои cookie, которыми я могу управлять только через PHP и они устанавливаются после первого прогона
setcookie("PHPSESSID", $_POST["PHPSESSID"], time() + 3600, "/";)
/bitrix/modules/main/include/prolog_before.php
а после второго начинает работать
$USER->IsAuthorized()
То есть строка в скрипте верно устанавливает cookie, но что бы воспользоваться плодами авторизации нужно обратиться к скрипту второй раз.
Как это выглядит
AS3
самописная функция забирает куки через javascript
и парсит их в обьект а затем отдает по ключу .
На стороне сервера сделано так PHP
собственно все, такая схема авторизации срабатывает только со второго раза.
Это все происходит по тому, что после подключения require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php";);
происходит сброс PHPSESSID на предыдущую, то есть не в ноль, не в рандом, а на предыдущую, но со второго раза пролог уже читает нормальную cookie которая была установлена в прошлый запуск.
Нужно авторизовать содержимое Flash на AS3, кнопку на сайте, кнопка это загрузчик файлов.
Получается авторизоваться только со второго раза, так как Flash имеет свои cookie, которыми я могу управлять только через PHP и они устанавливаются после первого прогона
setcookie("PHPSESSID", $_POST["PHPSESSID"], time() + 3600, "/";)
/bitrix/modules/main/include/prolog_before.php
а после второго начинает работать
$USER->IsAuthorized()
То есть строка в скрипте верно устанавливает cookie, но что бы воспользоваться плодами авторизации нужно обратиться к скрипту второй раз.
Как это выглядит
AS3
| Код |
|---|
_postParams.connect_type = "flash";
_postParams.PHPSESSID = getCookie("PHPSESSID");
_postParams.BITRIX_SM_GUEST_ID = getCookie("BITRIX_SM_GUEST_ID");
_postParams.BITRIX_SM_LAST_VISIT = getCookie("BITRIX_SM_LAST_VISIT");
_postParams.BITRIX_SM_SOUND_LOGIN_PLAYED = getCookie("BITRIX_SM_SOUND_LOGIN_PLAYED");
_postParams.BITRIX_SM_LOGIN = getCookie("BITRIX_SM_LOGIN");
_postParams.BITRIX_SM_SALE_UID = getCookie("BITRIX_SM_SALE_UID");
_postParams.action = "upload";
_postParams.confirm = "true";
trace("_postParams.PHPSESSID: "+_postParams.PHPSESSID);
_urlRequest.method = URLRequestMethod.POST;
_urlRequest.data = _postParams;
_fileReference.upload(_urlRequest, "userfile[]");
|
| Код |
|---|
private function getCookie(returnStr:Stri ng):S tring |
самописная функция забирает куки через javascript
| Код |
|---|
ExternalInterface.call("f unction(){return document.cookie}"; |
и парсит их в обьект а затем отдает по ключу .
На стороне сервера сделано так PHP
| Код |
|---|
if ($_POST["connect_type"] == "flash") {
setcookie("PHPSESSID", $_POST["PHPSESSID"], time() + 3600, "/");
}
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"); |
Это все происходит по тому, что после подключения require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php";);
происходит сброс PHPSESSID на предыдущую, то есть не в ноль, не в рандом, а на предыдущую, но со второго раза пролог уже читает нормальную cookie которая была установлена в прошлый запуск.


