Torawhite
User-
Posts
204 -
Joined
-
Last visited
Content Type
Profiles
Forums
Calendar
Store
Everything posted by Torawhite
-
Вот, сейчас сделал, как придумал. Работает, вроде! Спасибо вам большое за помощь!
-
Получается, что без танцев с бубном не получается... Есть ещё один метод, который пришёл мне в голову, правда он попахивает быдлокодом: Весь обработчик поместить в отдельный 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
А как правильно? А как правильно? Ааааа Всё. Спасибо! Разобрался. Что-то глаз замылился) -
Возвращение данных от сервера после ajax-запроса
Torawhite replied to Torawhite's question in JavaScript
Спасибо. С этим разобрался. Ответ приходит нужный - html код корзины. Но почему-то не вставляется. Не работает: $('#cart_content').hide().fadeIn().html(data); А зачем hide() и сразу же fadeIn() ? скрыть чтобы сразу же показать обратно?, как минимум вот так было бы логичнее: $('#cart_content').hide().html(data).fadeIn(); А по поводу не вставляется, в консоль ответ выведите посмотрите что там Да, так логичнее, в оригинале уже так и написал. Вот консоль -
Возвращение данных от сервера после ajax-запроса
Torawhite replied to Torawhite's question in JavaScript
Спасибо. С этим разобрался. Ответ приходит нужный - html код корзины. Но почему-то не вставляется. Не работает: $('#cart_content').hide().fadeIn().html(data); -
Здравствуйте! Никак не могу разобраться с ajax. Делаю корзину. Запрос отправляется index.php, где в контроллере есть условие: if($cart == 'add_item'){ add_to_cart($par_id, $par_qty); $_SESSION['total_sum'] = total_sum($_SESSION['cart']); //количество товара в корзину + защита от ввода несущетвующего параметра товара $_SESSION['total_quantity'] = 0; foreach($_SESSION['cart'] AS $key => $value){ if(isset($value['color_id'])){ // если получен цвет товара из бд - сцммируем $_SESSION['total_quantity'] += $value['qty']; }else{ //иначе удаляем такой праметр из сессии unset($_SESSION['cart'][$key]); } } cart(); exit;}Создаётся массив $_SESSION с ключом ['cart'], в конце есть функция cart();она формирует строку html самой корзины, то есть в цикле проходит по массиву $_SESSION['cart']. По идее, сервер должен вернуть эту строку, но не возвращает. Не могу понять, где я ошибся. Отправляю данные на сервер так: $(document).ready(function(){ $('#add_to_cart').click(function(){ var selected = $('.selected'); // Определяем переменную var color_section_id = selected.attr('data-color'); // Определяем переменную var select_body_item = $('#select_body_item_' + color_section_id + ' option:selected'); // Определяем переменную var parameter_id = select_body_item.val(); // Определяем переменную var input = $('.qty_input_wrap input'); // Определяем переменную var qty = input.val(); // Определяем переменную var cart_input = $('#cart_input_' + parameter_id); var cart_input_val = cart_input.val(); var cart_input_qty = cart_input.attr('data-cart-item-qty'); var item_qty_sum; item_qty_sum = parseInt(qty) + parseInt(cart_input_val); if(parameter_id != 0 ){ if(cart_input_val == cart_input_qty && cart_input_val || item_qty_sum > cart_input_qty){ $('#cart_item_qty').text(cart_input_val); $('#cart_item_stock').text(cart_input_qty); $("#modal_window_cart_stock_error").fadeIn(250); setTimeout(function() { $("#modal_window_cart_stock_error").fadeOut(250); }, 2000); }else{ $.ajax({ url: "http://store.torawhite.ru/", type: "POST", data: ({ cart: 'add_item', par_id: parseInt(parameter_id), par_qty: parseInt(qty), success: function(data){ $('#cart_content').hide().fadeIn().html(data); $("#modal_window_cart_add").fadeIn(250); setTimeout(function() { $("#modal_window_cart_add").fadeOut(250); }, 2000); }, error: function(){ } }) }); } }else{ $("#modal_window_cart_error").fadeIn(250); setTimeout(function() { $("#modal_window_cart_error").fadeOut(250); }, 2000); } }); });Данные проходят, массив создаётся, но новое содержимое корзины не вставляется. Корзина обновляется только после обновления самой страницы.
-
Спасибо. Решил не мучиться и выставил постоянную ширину
-
Помимо этого пункта меню есть ещё два, которые также "текут" по правому краю. По клику выпадает соответствующий див. Именно в этом пункте таблица. Самое обычное выпадающее меню. Только блок не растягивается в зависимости от содержимого
-
Если убрать position: relative; то выпадающее меню с таблицей никак привязано к . menu не будет - вёрстка слетит
-
Вот Всё лишнее убрал, даже поменял ul li на div. всё то же
-
Здравствуйте! Есть пример, при котором таблица отказывается растягиваться. Абсолютное позиционирование блока с текстом относительно блока выше - обязательно, так как этот блок - элемент меню. Нужно, чтобы таблица тянулась от ширины текста
-
Ограничение работы счётчика input по переменной
Torawhite replied to Torawhite's question in JavaScript
Спасибо большое! -
Самостоятельное изменение input запрещено. Есть кнопки - "Плюс" и "Минус". По нажатию "Плюс" значение input изменяется на единицу в положительную сторону, по нажатию "Минус" - в отрицательную. Нужно ограничить максимальное значение input переменной. Например, количество доступных товаров - 25 (в некую переменную попадает 25), нужно ограничить максимальное значение input цифрой 25. var minus = $('.minus');var plus = $('.plus'); plus.click( function () { var input = $(this).parent().find('input'); input.val(parseInt(input.val()) + 1); input.change(); }); minus.click( function () { var input = $(this).parent().find('input'); var count = parseInt(input.val()) - 1; count = count < 1 ? 1 : count; input.val(count); input.change(); });