Поиск по этому блогу

июня 13, 2010

Переменные сессии без cookies (sessvars.js)

В качестве предыстории - понадобилось мне организовать что-то вроде "корзины" интернет-магазина.. но именно "что-то вроде", потому что позиции в базу не забиваются, и как таковая регистрация пользователей отсутствует,  а список "товаров" представлен в виде таблиц прайсов и формы заказа рядышком. И каждая позиция прайса при клике на неё скриптом копируется в форму заказа. В общем такое решение было достаточно оптимальным и удобным в конкретном случае, помимо одного естественного недостатка - при переходе на другую страницу все данные формы исчезали. И если стандартные ФИО\e-mail можно было бы хранить в cookie , список заказанных позиций мог превысить лимит памяти для cookie, поэтому пришлось искать другое решение - и наткнулась я на такой скрипт - sessvars.js
позволяющий легко хранить и использовать данные сессии объёмом до 2Мб.  Стандартный мануал я не буду описывать, он и так закопипастен на куче блогов - посмотреть можно например тут http://xhtml.ru/2008/05/14/sessvars/ - и скрипт скачать оттуда же.  Просто приведу свой пример использования.
1. Само собой размещаем в шапке
<script src="/path/to/sessvars.js" type="text/javascript">
</script>
2. Пишем функции для сохранения и загрузки данных - что очень просто. И выглядит это примерно так.

<script type="text/javascript">
function LoadData(){
document.formname.fieldname1.value=sessvars.fieldname1||'';
    document.formname.fieldname2.value=sessvars.fieldname2||'';
    document.formname.fieldname3.value=sessvars.fieldname3||'';
    document.formname.fieldname4.value=sessvars.fieldname4||'';
};
function SaveData()
{ 
sessvars.fieldname1=document.formname.fieldname1.value;
    sessvars.fieldname2=document.formname.fieldname2.value;
    sessvars.fieldname3=document.formname.fieldname3.value;
    sessvars.fieldname4=document.formname.fieldname4.value;
};
</script>
Впрочем если надо сохранять все элементы форм и элементов много - можно было бы сохранять в цикле.. но это уже по потребностям и кто во что гаразд.

3. Осталось только поставить запуск наших функций загрузки и сохранения
<body onload="LoadData();" onunload="SaveData();">

Можно было бы повесить сохранение данных поля на его событие onChange() но не стоит забывать, что оно сработает только в том случае, если данные вводятся пользователем, а не добавляются программно.

Кстати есть и ещё один скриптик для сохранения данных, действующий по другому принципу, правда наткнулась я на него уже позже, поэтому близко не рассматривала, но тем не менее упомяну - называется он PersistJS