0
<< предыдущая заметкаследующая заметка >>
24 декабря 2009
тестируем flashcookie

Слава Йожу из Мюльхайма! Привинтили куковую авторизацию. Проверяем.

Вводная: имеются традиционные куки. У них есть недостатки. Например - они могут потеряться, стереться, случайно удалиться одной кнопкой (человек не собирался тереть авторизацию именно для нашего сайта, а просто вообще почистил все куки), трудные подростки могут легко чистить свои куки, рассчитывая нагадить, наконец, обычными куками можно управлять через политику безопасности браузера. И есть флэш. Флэш тоже позволяет запоминать на машине пользователя некоторую информацию. Но эта информация уже не подчиняется политике безопасности браузера и не стирается оптом со всеми куками, а лишь путем отдельных манипуляций с кэшем флэша. Поэтому ее удобно использовать для более прочной авторизации посетителя в блоге. Что и сделали.

1) Итак, лично тебе (да-да, именно тебе и только тебе) присвоен в этом блоге номер (временный).

2) Теперь попробуй его уничтожить. Зайди в куки, вытри переменную unic11 (кажется, так сейчас называется кука авторизации). Можешь вообще все куки удалить — без толку.

3) Как только ты зайдешь сюда повторно, номер сменится - блог выдаст тебе новый номер. Без этого никак - блог же не знает, новый ты посетитель или стер куки. Но это временно. Так и будет в скобочках написано: "временный".

4) Когда страница загрузилась, прежний номер восстановился в куках из флэш-кук, где был сохранен. Он пока не виден, но при следующей перезагрузке страницы ты снова увидишь свой старый номер.

Тестируем! О результатах отписываемся в каменты!

PS: Для тех, кто не понял, поясню еще раз. Данная система НЕ является самостоятельной авторизацией. Это лишь вспомогательный механизм, который в большинстве случаев позволяет эффективно восстановить потерявшиеся или стертые куки. Что способствует "упрочнению" авторизации.

PS: Я знаю, есть люди, которые любят задавать вопросы, мол, как не стыдно, и зачем это нужно, и чем не устраивают обычные куки, и почему надо плевать на желание и законное право людей их стирать... Объясню: не собираю личную информацию о деятельности в сети. Я не поисковик, у меня и возможностей таких нет. Я защищаю от потери идентификационный номер посетителя своего блога. Мне насрать на неудовлетворенное желание Пупкина утаить или сменить свой номер, потому что если такое желание возникло, это означает только одно: Пупкин собрался в моем блоге нагадить или каким-то образом меня обмануть. Мое законное право — применять на собственном сайте любые технические средства, помогающие идентифицировать посетителя. В том числе — флэш-куки.

PS: Вот демо-моделька Ежа, которая позволяет работать на JS с традиционными куками и флэш-куками:

[показать спрятанное]
<html><body>

<!-- Спасибо Alexander Ray! -->

<div id='ll'><script>document.getElementById('ll').innerHTML=document.cookie;</script></div><p>

<script>
// восстановить переменную из флэш-кук в куки (если же во флэш-куках нет, а в куках есть - запомнить ее во флэш-куках)
function c_rest(name) { var v=fc_read(name); if(v!=null&&v!='') return c_save(name,v); v=c_read(name); if(v!='') fc_save(name,v); }

// записать в обычную куку name значение v
function c_save(name,v) { var N=new Date(); N.setTime(N.getTime()+(v==''?-1:3153600000000)); document.cookie=name+"="+v+";expires="+N.toGMTString()+";path=/;"; }

// прочитать обычную куку name
function c_read(name) { a=' '+document.cookie+';'; var c=a.indexOf(' '+name+'='); if(c==-1) return ''; a=a.substring(c+name.length+2); return a.substring(0,a.indexOf(';'))||""; }

// прочитать из флэш-кук переменную name
function fc_read(name){ if(swf('kuki').flashcookie_read){ return swf('kuki').flashcookie_read(name); }}

// записать во флэш-куку name значение v
function fc_save(name,v){ if(swf('kuki').flashcookie_save){ swf('kuki').flashcookie_save(name,v); }}

// вспомогательная процедура для запуска
function swf(a){ if(navigator.appName.indexOf("Microsoft") != -1) return window[a]; else return document[a]; }

// эту процедуру вызывает флэшка при своей загрузке (типа onload), сюда вписываем то, что надо сделать
function setIsReady() {
c_rest('unicx'); // восстановить куку unicx
c_rest('lju'); // восстановить куку lju
}
</script>

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="kuki" width="1" height="1"
codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab"
style="width:1px;height:1px;overflow:hidden;position:absolute;left:-400px;top:0;border:0;">
<param name="movie" value="/blog/design/kuki_ray.swf" />
<embed src="/blog/design/kuki_ray.swf" width="1" height="1" name="kuki" type="application/x-shockwave-flash"
pluginspage="http://www.adobe.com/go/getflashplayer"></embed>
</object>


<form>
name: <input type=text name='name' size=10 value=''><br>
value: <input id='v' type=text name='data' size=80 value=''>
<br>
<input value="FlashCookie Save" type="button" onclick="fc_save(this.form.name.value,this.form.data.value)">
<input value="FlashCookie Read" type="button" onclick="document.getElementById('v').value=fc_read(this.form.name.value)">
<input value="Cookie Save" type="button" onclick="c_save(this.form.name.value,this.form.data.value)">
<input value="Cookie Read" type="button" onclick="document.getElementById('v').value=c_read(this.form.name.value,this.form.data.value)">
<input value="Cookie Restore" type="button" onclick="c_restore(this.form.name.value)">
</form>

</body></html>


Примечание для эспериментаторов: скрипт работает только на реальном хостинге. На компе открывать как file:/// бесполезно.
<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
архив понравившихся мне ссылок
Оставить комментарий