Torawhite
User-
Posts
204 -
Joined
-
Last visited
Information
-
Sex
Мужчина
Torawhite's Achievements
Explorer (1/14)
0
Reputation
-
Вот, сейчас сделал, как придумал. Работает, вроде! Спасибо вам большое за помощь!
-
Получается, что без танцев с бубном не получается... Есть ещё один метод, который пришёл мне в голову, правда он попахивает быдлокодом: Весь обработчик поместить в отдельный php-файл, скажем, reg_auth.php, инклудить его на site.ru и на sub.site.ru. А в жаваскрипт, который аяксом отправляет запрос, в url: прописывать текущий домен - $_SERVER['HTTP_HOST'], то есть или site.ru, или sub.site.ru. По идее, всё должно работать. Как вам такой вариант?
-
Смотрите, сессия создана, PHPSESID кука присутствует и домен её равен .site.ru, при переходе с site.ru на sub.site.ru и обратно она сохраняется, значение остаётся тем же. Я нахожусь на sub.site.ru и заполняю поля ввода для регистрации, жму кнопку, далее ajax отправляет все данные php-скрипту на site.ru (я так понимаю, что никакая кука этому скрипту видна не будет). Скрипт делает запрос в базу и сверяет, логин, если он уникален, то добавляет запись в базу, извлекает из базы id нового пользователя и создаёт сессию: $sql3 = "SELECT user_id FROM users WHERE user_mail = :user_mail"; $data3 = $pdo->prepare($sql3); $data3->bindValue(':user_mail', $mail, PDO::PARAM_STR); $data3->execute(); $res3 = $data3->fetch(PDO::FETCH_ASSOC); $_SESSION['auth']['user']['user_name'] = $name; $_SESSION['auth']['user']['user_id'] = $res3['user_id'];Далее, он выводит html оператором echo - пункты меню личного кабинета, имя пользователя - этот код html является ответом сервера для ajax. Отправляет его обратно на sub.site.ru и вставляет в нужно место на странице. После обновления всё пропадает, так как, видимо, сессия тут иная и ничего в ней нет... Я думал, что мы передаём идентификатор, чтобы сервер понял, в какую сессию записать данные, но что-то я не до конца тут понял...
-
Передача идентификатора ничего не изменила. Передавал так: $.ajax({ url: 'http://site.ru/?PHPSESSID=' + $.cookie('PHPSESSID'),// дальше остальной код
-
Это у меня прописано, не работает Если сессии разные у домена и поддомена, то, возможно у меня подход не тот. Может нужно как-то передавать идентификатор сессии в ajax при регистрации/авторизации?
-
А почему сессия пропадает при входе с поддомена? И как записать в сесию по куке, если запрос отправляется асинхронно, получается, что кука уже будет не видна?
-
Сейчас напишу, как у меня всё сейчас происходит. Маленько разобрался в вопросе, но не до конца Регистрацию/Авторизацию осуществляю с помощью суперглобального массива $_SESSION данные отправляю асинхронно ajax на домен второго уровня example.ru , там выполняется php-скрипт регистрации и авторизации. По такому же принципу реализована корзина. Сайт имеет поддомен sub.example.ru . в .htaccess прописано php_value session.cookie_domain ".example.ru" сессию начинаю в обоих контроллерах(контроллер 1 - .example.ru, контроллер 2 - sub.example.ru) таким образом: if (!session_id()) { ini_set('session.use_cookies', 'On'); ini_set('session.use_trans_sid', 'Off'); ini_set('session.cookie_domain', '.example.ru'); session_set_cookie_params(0, '/', '.example.ru'); session_start(); } Кука PHPSESSID с идентификатором передаётся между доменом о поддоменом и обратно. Проблема 1: если осуществлять регистрацию и авторизацию находясь на sub.example.ru (напомню - ajax отправляет данные на .example.ru) то $_SESSION['auth'] создаётся, но после обновления страницы пропадает. Проблема 2: если осуществлять регистрацию и авторизацию находясь на sub.example.ru (напомню - ajax отправляет данные на .example.ru) и при этом существует $_SESSION['cart'], то $_SESSION['auth'] создаётся вне сессии, в которой создана $_SESSION['cart'], после обновления страницы $_SESSION['auth'] также пропадает. НО! Если осуществлять регистрацию/авторизацию с .example.ru и при этом существует $_SESSION['cart'], то $_SESSION['auth']создаётся в этой же сессии, после обновления никуда не пропадает и сохраняется на sub.example.ru. В чём проблема?
-
Сейчас увидел, что создаются автоматически без моего участия две куки с одинаковым именем "PHPSESSID", но разными значениями - одна для корневого домена, другая для поддомена, так как session_start(); у меня прописан в контроллере корневого домена и в контроллере поддомена.
-
Делаю так: // в контроллере указываю начало сессии:session_start();// в модели выполняю скрипт по регистрации, после занесения в базу данных данных о пользователе создаю сессию и помещаю туда имя пользователя,которое пришло ко мне при регистрации:$_SESSION['auth']['user']['user_name'] = $name;// получаю идентификатор сессии и записываю его в переменную$SID = session_id();// устанавливаю кукуsetcookie('user', $SID, time()+3600, '', '.torawhite.ru');Не работает. Что я делаю не так?
-
Вы не могли бы чуть подробнее? Мне нужно что-то зашифровать и поместить в базу? Читал, что можно через куки делать, но не совсем понял механизм. То есть мне нужно в php-скрипте, который реализует авторизацию, и который находится в корневом домене, создать некую куку и что-то туда поместить?
-
Здравствуйте! Авторизация происходит средствами ajax, php-скрипт расположен на домене первого уровня. База данных одна, домен третьего уровня является поддоменом того же домена второго уровня. Нужно, чтобы авторизация работала на обоих доменах. Авторизация осуществляется с помощью глобального массива $_SESSION. Как же реализовать кроссдоменную авторизацию?
-
Неадекватная работа обработчика события до/после загрузки контента ajax-ом
Torawhite replied to Torawhite's question in JavaScript
Разобрался - конфликт скриптов -
$(document).on('click', function (event){var drop = $('.menu-projects');if (!drop.is(event.target) && drop.has(event.target).length === 0 ){$('.menu-projects').hide();}});
-
Здравствуйте! Нужно реализовать работу скрипта и до и после обновления части страницы ajax-ом. Столкнулся с проблемой правильной привязки обработчика событий к селектору. С таким вариантом: $(document).ready(function(){$('.cart_del').click(function(){var par_id = $(this).attr('data-cart-item-par-id');alert(par_id);// далее код работы с удалением элемента из корзины});});код работает только до обновления страницы ajax-ом. После обновления обработчики слетают и код не работает, что понятно. Но со следующим кодом всё должно работать: $(document).ready(function(){$(document).on('click', '.cart_del',function(event){var target = $(event.target);var par_id = target.attr('data-cart-item-par-id');alert(par_id);// далее код работы с удалением элемента из корзины});});но нет, работает всё зеркально к предыдущему варианту - до обновления страницы скрипт не работает, а после обновления начинает работать!
-
Возвращение данных от сервера после ajax-запроса
Torawhite replied to Torawhite's question in JavaScript
А как правильно? А как правильно? Ааааа Всё. Спасибо! Разобрался. Что-то глаз замылился)