Почему сами стираются 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> |
Цитата:
|
Размер хранилища будь то куки или storage всегда лимитирован и зависит от той или иной системы, броузера ...
Когда пользователь выходит за размеры этого хранилища, старые данные стираются, новые добавляются |
dima85,
и может убрать jquery из кода? document.getElementById('id_user').value = id_user; вместо $("#id_user").val |
Очень сомневаюсь что они используют режиме аноним, каждая авторизация вместе с 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, посмотрим, но сомневаюсь что дело в этом. |
Я нашел почему id_user меняется, вот: https://webkit.org/blog/8613/intelli...revention-2-1/
Насколько я понимаю Safari не дает ставить Сookie более чем на 7 дней. Но если сделать это через php то все получится. |
Часовой пояс GMT +3, время: 00:43. |