Jump to content

Torawhite

User
  • Posts

    204
  • Joined

  • Last visited

Everything posted by Torawhite

  1. Вот, сейчас сделал, как придумал. Работает, вроде! Спасибо вам большое за помощь!
  2. Получается, что без танцев с бубном не получается... Есть ещё один метод, который пришёл мне в голову, правда он попахивает быдлокодом: Весь обработчик поместить в отдельный php-файл, скажем, reg_auth.php, инклудить его на site.ru и на sub.site.ru. А в жаваскрипт, который аяксом отправляет запрос, в url: прописывать текущий домен - $_SERVER['HTTP_HOST'], то есть или site.ru, или sub.site.ru. По идее, всё должно работать. Как вам такой вариант?
  3. Смотрите, сессия создана, 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 и вставляет в нужно место на странице. После обновления всё пропадает, так как, видимо, сессия тут иная и ничего в ней нет... Я думал, что мы передаём идентификатор, чтобы сервер понял, в какую сессию записать данные, но что-то я не до конца тут понял...
  4. Передача идентификатора ничего не изменила. Передавал так: $.ajax({ url: 'http://site.ru/?PHPSESSID=' + $.cookie('PHPSESSID'),// дальше остальной код
  5. Это у меня прописано, не работает Если сессии разные у домена и поддомена, то, возможно у меня подход не тот. Может нужно как-то передавать идентификатор сессии в ajax при регистрации/авторизации?
  6. А почему сессия пропадает при входе с поддомена? И как записать в сесию по куке, если запрос отправляется асинхронно, получается, что кука уже будет не видна?
  7. Сейчас напишу, как у меня всё сейчас происходит. Маленько разобрался в вопросе, но не до конца Регистрацию/Авторизацию осуществляю с помощью суперглобального массива $_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. В чём проблема?
  8. Сейчас увидел, что создаются автоматически без моего участия две куки с одинаковым именем "PHPSESSID", но разными значениями - одна для корневого домена, другая для поддомена, так как session_start(); у меня прописан в контроллере корневого домена и в контроллере поддомена.
  9. Делаю так: // в контроллере указываю начало сессии:session_start();// в модели выполняю скрипт по регистрации, после занесения в базу данных данных о пользователе создаю сессию и помещаю туда имя пользователя,которое пришло ко мне при регистрации:$_SESSION['auth']['user']['user_name'] = $name;// получаю идентификатор сессии и записываю его в переменную$SID = session_id();// устанавливаю кукуsetcookie('user', $SID, time()+3600, '', '.torawhite.ru');Не работает. Что я делаю не так?
  10. Вы не могли бы чуть подробнее? Мне нужно что-то зашифровать и поместить в базу? Читал, что можно через куки делать, но не совсем понял механизм. То есть мне нужно в php-скрипте, который реализует авторизацию, и который находится в корневом домене, создать некую куку и что-то туда поместить?
  11. Здравствуйте! Авторизация происходит средствами ajax, php-скрипт расположен на домене первого уровня. База данных одна, домен третьего уровня является поддоменом того же домена второго уровня. Нужно, чтобы авторизация работала на обоих доменах. Авторизация осуществляется с помощью глобального массива $_SESSION. Как же реализовать кроссдоменную авторизацию?
  12. $(document).on('click', function (event){var drop = $('.menu-projects');if (!drop.is(event.target) && drop.has(event.target).length === 0 ){$('.menu-projects').hide();}});
  13. Здравствуйте! Нужно реализовать работу скрипта и до и после обновления части страницы 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);// далее код работы с удалением элемента из корзины});});но нет, работает всё зеркально к предыдущему варианту - до обновления страницы скрипт не работает, а после обновления начинает работать!
  14. А как правильно? А как правильно? Ааааа Всё. Спасибо! Разобрался. Что-то глаз замылился)
  15. Спасибо. С этим разобрался. Ответ приходит нужный - html код корзины. Но почему-то не вставляется. Не работает: $('#cart_content').hide().fadeIn().html(data); А зачем hide() и сразу же fadeIn() ? скрыть чтобы сразу же показать обратно?, как минимум вот так было бы логичнее: $('#cart_content').hide().html(data).fadeIn(); А по поводу не вставляется, в консоль ответ выведите посмотрите что там Да, так логичнее, в оригинале уже так и написал. Вот консоль
  16. Спасибо. С этим разобрался. Ответ приходит нужный - html код корзины. Но почему-то не вставляется. Не работает: $('#cart_content').hide().fadeIn().html(data);
  17. Здравствуйте! Никак не могу разобраться с 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); } }); });Данные проходят, массив создаётся, но новое содержимое корзины не вставляется. Корзина обновляется только после обновления самой страницы.
  18. Спасибо. Решил не мучиться и выставил постоянную ширину
  19. Помимо этого пункта меню есть ещё два, которые также "текут" по правому краю. По клику выпадает соответствующий див. Именно в этом пункте таблица. Самое обычное выпадающее меню. Только блок не растягивается в зависимости от содержимого
  20. Если убрать position: relative; то выпадающее меню с таблицей никак привязано к . menu не будет - вёрстка слетит
  21. Вот Всё лишнее убрал, даже поменял ul li на div. всё то же
  22. Здравствуйте! Есть пример, при котором таблица отказывается растягиваться. Абсолютное позиционирование блока с текстом относительно блока выше - обязательно, так как этот блок - элемент меню. Нужно, чтобы таблица тянулась от ширины текста
  23. Самостоятельное изменение 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(); });
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy