Вы могли использовать DirHandle:
use DirHandle;
$d = new DirHandle ".";
if (defined $d)
{
while (defined($_ = $d->read)) { something($_); }
$d->rewind;
while (defined($_ = $d->read)) { something_else($_); }
undef $d;
}
DirHandle
обеспечивает альтернативу, более чистый интерфейс к opendir()
, closedir()
, readdir()
, и rewinddir()
функции.
Я не использовал сеанс годами. Если вам нужно отслеживать прогресс пользователя между страницами (например, через процесс оформления заказа в корзине), сохраните любую требуемую информацию о состоянии в базе данных и свяжите ее с пользователем с помощью файла cookie.
Стоит отметить, что .NET поддерживает различные механизмы «сеанса», один из которых хранит информацию в базе данных (на мой взгляд, что гораздо предпочтительнее), а не в процессе.
Ознакомьтесь с профилями членства ASP.NET. Это позволяет вам сериализовать и хранить / извлекать объекты для каждой учетной записи пользователя, независимо от того, является ли пользователь анонимным или нет. Мне удалось успешно использовать это с длинными онлайн-приложениями типа волшебника.
У вас есть следующие параметры: файлы cookie, база данных, строка запроса, переменные страницы и кеш сервера, чтобы попытаться справиться с природой Интернета без сохранения состояния. У каждого свой компромисс, но с практической точки зрения я сейчас использую сеанс, который сохраняется в базе данных. Это хорошо масштабируется для серверных ферм, помогает сохранить небольшой размер страницы и легко реализуется.