Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Инструментарий для вебмастеров - Сессии в PHP


WeBinstruments

Инструментарий для веб-мастеров 2

 
 Меню
  PHP скрипты  
  Программы  
  Документация  
  Новости  
  Статьи  
 
 Контакты
  icq: 158325531
  email: adm.webi.ru
 
 
   Сессии в PHP

Комментарии к статье и вопросы http://webi.ru/webi_articles/6_9_f.html
Автор статьи webi.ru

Что такое сессии в PHP?
С помощью сессий можно передавать произвольное количество переменных и хранить их между запросами.
Нет необходимости передавать переменные в запросе, все они хранятся на сервере, а доступ к ним осуществляется с помощью уникального номера, присвоенного при старте сессии. Номер сессии(SID) выглядит подобным образом "e591e8ab5892a486f60f208487152348".
Каждый посетитель сайта получает уникальный номер сессии, по этой причине в сессиях можно хранить данные, относящиеся к конкретному посетителю, не боясь, что эти данные увидит кто-то другой. Хранение переменных в сессиях обеспечивает сокрытие данных, если нужно передавать логин и пароль от страницы к странице, то сессии это один из вариантов.
Если нужно передавать большое количество переменных или большие текстовые переменные, опять же сессии в этой ситуации самый оптимальный вариант, так как не надо передавать большие переменные от запроса к запросу, создавая большой трафик на стороне клиента и на стороне сервера.

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

Практическое применение сессий.
Переменные сессий хранятся в глобальном массиве $_SESSION. После старта сессий можно просто сохранять в этом массиве значения и без всяких лишних действий просто получать значения из него. Приведу пример двух файлов, в первом в сессии будут помещаться переменные, а во втором эти переменные будут получаться из сессии.

<?
// файл 1.php
session_start();
$_SESSION['asd']='aaaaaa';
$_SESSION['name']['qwe']='тест';
?>
<a href="2.php">тест</a>
.......................................
<?
// файл 2.php
session_start();
print
$_SESSION['asd'];
print
$_SESSION['name']['qwe'];
?>

Чтобы начать работать с сессиями, надо запустить их (session_start();)
И после этого появляется доступ к глобальному массиву $_SESSION.
В примере видно, что массив может быть не только одномерным. Это обычный массив и работать с ним можно как с обычным массивом.
В первом файле присваиваем значения в сессии, во втором файле этот массив доступен и можно получать из него данные, можно добавлять и удалять данные.

Побочные эффекты сессий.
Некоторые сервера (хостинги или выделенные сервера) при работе с сессиями настроены таким образом, что если номер сессии нельзя передать в куку браузера (например куки отключены), то номер сессии будет передаваться в ссылках. Конечно это очень удобно, сервер сам автоматически определяет работают куки или нет и выбирает место хранения номера сессии в куке или в адресе ссылки. При этом ко всем вашим ссылкам будет автоматически добавляться номер сессии(SID), например так test.ru/index.php?PHPSESSID=e591e8ab5892a486f60f208487152348.
Такой универсальный подход очень хорош, если такие страницы не будут индексироваться поисковыми системами.
Если же ваш сайт будут посещать поисковики, то они конечно не будут принимать куки и увидят ссылки с номерами сессий.
Многие поисковые системы не любят таких ссылок и занижают релевантность страниц.
Поэтому лучше не разрешать использование SID в URL, это наплодит большое количество ссылок с устаревшими сессиями.

Как запретить использовать SID в URL.
Если у вас есть доступ к настройкам php.ini, вы можете отключить использование номера сессии в URL:
session.use_trans_sid = 0
Но не у всех есть доступ к настройкам php. Поэтому приведу несколько примеров, как сделать url более привлекательным для поисковиков не меняя настройки php.

1. В некоторых случаях избавиться от SID в ссылке можно используя полный путь в ссылке.
То есть если у вас ссылка имеет вид <a href="test.php">тест</a>, то SID будет добавлен автоматически (если не получится добавить в куки), если использовать полный путь <a href="http://site.ru/test.php">тест</a>, тогда SID не добавится (зависит от настроек сервера).

2. Другой вариант, это вообще не стартовать сессии, если не нужно.
Например проверять наличие каких либо переменных и если определенные переменные присутствуют, стартовать сессии.

3. Иногда бывает необходимо стартовать сессии в любом случае. Если не получается избавиться от SID в ссылке с помощью использования полного адреса, можно сделать SID одинаковым, чтобы не размножать ссылки с уникальными номерами.
В php есть константа SID, которая доступна в том случае, если номер сессии не получилось вставить в куки. Если номер сессии удалось вставить в куки, то эта константа будет пустой.
Значение именно этой константы и добавляется в ссылку. Константа SID имеет примерно такое строковое значение "PHPSESSID=e591e8ab5892a486f60f208487152348".
Значит можно сделать проверку на присутствие значения в этой константе. Если присутствует что-то в ней, то можно отключать сессии.
Можно разрушить сессию, можно удалит все переменные из сессии, но все это не спасет от добавления SID в ссылку, если отключены куки.
Раз уж SID все равно будет добавляться, тогда сделаем его не уникальным, тогда не будет так много разных ссылок.

<?
session_start
();
if(
SID)
{
  session_destroy();
  session_id('no');
  session_start();
  session_destroy();
}
?>

После старта сессий проверяем, есть ли что-то в SID
Если в SID есть что-то, значит номер сессии не установился в куки и при определенных настройках сервера номер добавится в ссылку. Дальше разрушим сессию, тоесть удалим файл сессии(session_destroy();)
Теперь создаем новый номер сессии, не уникальный (session_id('no');). Сейчас номер сессии будет просто "no".
Чтобы новый номер сессии заменил предыдущий, нужно еще раз стартовать сессию(session_start();).
И на всякий случай можно разрушить сессию, удалить файл этой новой сессии (session_destroy();)

Теперь ко всем ссылкам будет добавляться PHPSESSID=no, но работать эти сессии не будут, будут работать только те сессии, которые смогут установить куки.

Этот вариант можно конечно доработать, поставить проверки на поисковики и т.д.


   Софт

Site-Auditor 1.43(новая версия)
Сайтsite-auditor.ru
Обсуждаем и скачиваем тут http://webi.ru/webi_files/12_5_f.html

Site-Auditor способен собрать самую полную информацию о вашем сайте в поисковых системах:
Индексы цитирования Яндекса - ТИЦ и Google - PageRank;
Количество страниц, проиндексированных поисковыми системами Яндекс, Рамблер, Google, Апорт и Yahoo.
Количество ссылок на сайт, обнаруженных поисковыми системами Google, Яндекс, Yahoo.
Данные о наличии сайта в каталогах Яндекс, Рамблер Top100, Апорт и DMOZ.

Одновременно со сбором данных производится анализ титульной страницы сайта, и фиксируется HEADER выдаваемый сервером.

Имеется сервис видимость сайта. Этот сервис предоставляет отчет о положении сайта в поисковых системах по определенным запросам.

Обновлено: 26/07/2007 (версия 1.43)
Добавлена возможность настроить объем и формат информации копирующейся в буфер обмена в разделе "Видимость сайта".
Изменен движок показа объявлений. Теперь при наведении мыши на объявление прокрутка списка останавливается, до момента пока курсор не будет убран за границы области, в которой показывается объявление. Добавлена возможность взаимодействовать с объявлением во время сбора информации.


Copyright © 2003-2007 WeBi

В избранное