информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Атака на InternetСетевые кракеры и правда о деле ЛевинаГде водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Столлман возвращается в FSF 
 The Great Suspender предположительно... 
 Десятилетняя уязвимость в sudo 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / web building
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Метод восстановления функций JScript-объекта после извлечения его из ASP Session object. 19.07.12 16:08  
Автор: HandleX <Александр М.> Статус: The Elderman
Отредактировано 19.07.12 16:24  Количество правок: 8
<"чистая" ссылка>
Часто мелкие web-проекты не имеет смысла ваять на ASP.NET, многие предпочитают использовать классический ASP.

Простые переменные сессии пользователя сохраняют в ASP Session object, из которого их потом можно почитать по предоставленному во время записи наименованию.
На сервере специально стал использовать в ASP скриптах MS JScript, потому что ну наверное хорошо, что один и тот же язык можно использовать как в браузере на клиентской стороне, так и на сервере, не нужно каждый раз "переключать мозги".
И вот, JScript объекты прекрасно сохранялись в сессии и извлекались оттуда... пока они были простых встроенных прототипов -- ну там Number, Date, String и т.п. Даже если у объекта простые поля — поля читались без проблем. Проблемы возникли, когда у объекта появились методы. Объект извлекался, но при попытке исполнения его метода возникала ошибка "Не удается выполнить программу из освобожденного сценария", хотя сценарий с описанием объекта прогружался перед чтением объекта из сессии. После небольших исследований выяснилось, что прототип у метода не является объектом Function. Попытка узнать, что это за объект не давала результатов — обращение к prototype метода тоже вызывало ошибку, хотя чтение typeof(наш "ущербный" метод) исправно выдавало "function".
В общем, приделал ко всем сохраняемым в сессии сложным объектам конструктор, который если замечает, что в него передали параметр, тупо копирует в создаваемый объект все поля из "ущербного", при этом не прикасаясь к функциям. Приведу пример кода, может кому пригодится.
if (fromOrphaned) {
	for (each in fromOrphaned) {
		if (typeof(fromOrphaned[each]) != "function") {this[each] = fromOrphaned[each]}
	}
}

---


Как это работает? Поскольку мы сохраняли свой объект, то знаем, какого он должен быть типа. После извлечение объекта из сессии, посылаем его параметром в конструктор его типа, а потом пользуемся новым "пролеченным" объектом без проблем, старый уже не нужен, свои поля он передал новому.

Всем удачного извлечения жабаскриптовых объектов из сессий! :-)
1






Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2021 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach