Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.03.2020, 20:41
Профессор
Отправить личное сообщение для dima85 Посмотреть профиль Найти все сообщения от dima85
 
Регистрация: 14.03.2010
Сообщений: 194

Почему сами стираются Cookie?
В форме авторизации, есть скрытое поле куда вставляется случайные символы хранящиеся в сookie, если в сookie нет переменной id_user в которой они и хранятся, js создает и записывает туда сам случайно генерированные символы на 365 дней.
Проблема в том что по какой-то непонятой причине у НЕКОТОРЫХ пользователей 1-2 раза в неделю этот id_user теряется и создается новый. Это замечено у пользователей Win и iPhone - 100% они ничего не чистят руками. Почему такое происходит?
C localStorage такая же ситуация.

<form action="/login" method="POST" role="form">
          <input type="text" name="email" required>
          <input type="password" name="password" required>
          <input type="hidden" name="id_user" value="" id="id_user">
          <input type="hidden" name="recaptcha_response" id="recaptchaResponse">
          <input type="submit" value="Log In">
        </form>

<script>
    function createCookie(name, value, days) {
      if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        var expires = "; expires=" + date.toGMTString();
      } else expires = "";
      document.cookie = name + "=" + value + expires + "; path=/";
    }

    function readCookie(name) {
      var nameEQ = name + "=";
      var ca = document.cookie.split(';');
      for (var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') c = c.substring(1, c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
      }
      return null;
    }

    if (readCookie('id_user')) {
      $("#id_user").val(readCookie('id_user'));
    } else {
        var id_user = new Array(10).join().replace(/(.|$)/g, function() {
          return ((Math.random()*36)|0).toString(36)[Math.random() < .5?"toString": "toUpperCase"]();
        });
        createCookie('id_user', id_user, 365);
        $("#id_user").val(id_user);
    }

    //  if (localStorage.getItem('id_user')) {
    //    $("#id_user").val(localStorage.getItem('id_user'));
    //  } else {
    //    var id_user = new Array(10).join().replace(/(.|$)/g, function() {
    //      return ((Math.random()*36)|0).toString(36)[Math.random() < .5?"toString": "toUpperCase"]();
    //    });
    //    localStorage.setItem('id_user', id_user);
    //    $("#id_user").val(id_user);
    //  }
  </script>
Ответить с цитированием
  #2 (permalink)  
Старый 16.03.2020, 21:09
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Сообщение от dima85
они ничего не чистят руками.
не чистят руками, но может быть пользуются они или близкие режимом аноним или чем-то подобным, типа надписи стереть следы посещения интернета.

Последний раз редактировалось рони, 16.03.2020 в 21:22.
Ответить с цитированием
  #3 (permalink)  
Старый 16.03.2020, 21:24
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Размер хранилища будь то куки или storage всегда лимитирован и зависит от той или иной системы, броузера ...
Когда пользователь выходит за размеры этого хранилища, старые данные стираются, новые добавляются
Ответить с цитированием
  #4 (permalink)  
Старый 16.03.2020, 21:27
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

dima85,
и может убрать jquery из кода?
document.getElementById('id_user').value = id_user;

вместо $("#id_user").val
Ответить с цитированием
  #5 (permalink)  
Старый 16.03.2020, 21:37
Профессор
Отправить личное сообщение для dima85 Посмотреть профиль Найти все сообщения от dima85
 
Регистрация: 14.03.2010
Сообщений: 194

Очень сомневаюсь что они используют режиме аноним, каждая авторизация вместе с id_user сохраняется в MySQL и я вижу что старый id_user никогда не выскакивает снова. То есть, были бы случаи когда человек забыл и открыл браузер в обычном режиме, и я бы увидел старый id_user.

Например вот UserAgent не меняется вообще, ip меняется:
Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Mobile/15E148 Safari/604.1


У этого человека iPhone, сегодня сменился его id_user до этого старый продержался около 7 дней, он проходит авторизацию на сайте по 2-5 раза в день.


А может как-то можно через JS выяснить когда человек открыл сайт в режиме аноним?

По поводу лимитов на телефоне, хорошая идея, но а почему такое происходит с компьютером?

рони, избавился от jquery, посмотрим, но сомневаюсь что дело в этом.

Последний раз редактировалось dima85, 16.03.2020 в 21:57.
Ответить с цитированием
  #6 (permalink)  
Старый 16.03.2020, 21:57
Профессор
Отправить личное сообщение для dima85 Посмотреть профиль Найти все сообщения от dima85
 
Регистрация: 14.03.2010
Сообщений: 194

Я нашел почему id_user меняется, вот: https://webkit.org/blog/8613/intelli...revention-2-1/

Насколько я понимаю Safari не дает ставить Сookie более чем на 7 дней.
Но если сделать это через php то все получится.

Последний раз редактировалось dima85, 17.03.2020 в 01:39.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Cookie для меню аккордион и для div Lastedl jQuery 1 03.12.2013 04:55
id + cookie + redirect Gennadiy Javascript под браузер 2 29.03.2013 17:08
проверка отсутствия записей в cookie legrol Общие вопросы Javascript 2 18.08.2012 19:27
Свойства объекта, методы и this. Почему свойство вызывается с () ? jsuse Общие вопросы Javascript 2 04.11.2011 20:39
Хранение и удаление cookie в IE john-samilin Internet Explorer 4 07.07.2011 10:57