Вопрос как бы сделать авторизацию с первого раза через 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 которая была установлена в прошлый запуск.