Профессиональное программирование на PHP

Страница 255 из 591


Кэширование на основе cookie-файлов 263

ключается к общему сегменту памяти и завершает работу, не освободив его, то данный ресурс остается в системе. Все ресурсы System V извлекаются из глобального пула, поэтому даже случайная потеря сегмента может привести к тому, что доступные сегменты очень быстро закончатся. Даже если машина РНР реализовала бы подсчет ссылок в общих сегментах памяти (чего она не делает), все равно данная проблема возникала бы в случае непредвиденного сбоя в машине РНР или сервере, на котором она работает. В идеальном мире этого бы не случилось, но в загруженных Web-серверах периодические ошибки сегментации нередки. Следовательно, общая память System V не является жизнеспособным механизмом кэширования.

Кэширование на основе cookie-файлов

Кроме традиционного кэширования данных на стороне сервера, можно кэшировать данные на клиентской стороне, используя в качестве механизма хранения cookie-файлы. Такая методика хорошо подходит, если требуется кэшировать сравнительно небольшие объемы данных для отдельных пользователей. В ситуации с большим количеством пользователей серверное кэширование даже небольшого количества данных для каждого пользователя может потреблять значительное дисковое пространство.

В обычной реализации cookie-файл используется для отслеживания идентичности пользователя и передачи информации о профиле пользователя на каждую страницу. Однако cookie можно использовать не только для хранения идентификационной информации пользователя, но и для хранения информации о его профиле.

Например, на персонифицированной странице портала пользователь может получить доступ из навигационной панели к четырем настраиваемым областям портала.

 RSS-обновления с другого сайта;

 прогноз погоды;

 спортивные результаты;

 новости по регионам и категориям.

Для того чтобы сохранить пользовательские настройки навигации в таблице usef_navigation, а затем получить к ним доступ посредством методов get_inte-rests и set_interest, можно использовать приведенный ниже код. <?РНР

require 1 DB. inc1 class User {

public $name,-

public $id;

public function _construct($id) {

$this->id = $id; $dbh = new DB_Mysql_Test; $cur = $dbh->prepare("SELECT

name FROM

users u WHERE

userid = :1"); $row = $cur->execute($id)->fetch_assoc() $this->name = $row['name'];




  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006