Главная | Форум | Статьи | Фaйлы| Картинки WoW | Профиль | Регистрация | Вход

[ Новые сообщения · Правила форума · Поиск · RSS ]

WoW-Info — информационный World of Warcraft портал

Сессии в PHP - Форум

  • Сторінка 1 з 1
  • 1
Сессии в PHP
DiyvolДата: Неділя, 19.12.2010, 01:42 | Сообщение # 1



Diyvol
ЗлОй-АйТИшник
Центурион
Группа: Best of the Best user Wow-info
Сообщений: 356

Замечания:

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

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

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

Code
<?
  // файл 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 все равно будет добавляться, тогда сделаем его не уникальным, тогда не будет так много разных ссылок.

Code
<?
  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, но работать эти сессии не будут, будут работать только те сессии, которые смогут установить куки.

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




Веб-дизайнер.
Работа, учеба и тренажерный зал. Жизнь это когда ты рад тому, что ты устал. Я не вижу смысла в жизни наркоманов. Наркотик в роли пастуха для всех этих баранов. Я иду вперед и не думаю сворачивать.
 
  • Сторінка 1 з 1
  • 1
Пошук:

Новые сообщения в темах
Сдам в аренду сервер и хостинг · (Хост Предложения)
Автор: redlaine
Последнее сообщение в 23:53
хаха :D · (Приколы)
Автор: [N1ke]Medved
Последнее сообщение в 18:40
Autobattle - новый боевой бот ... · (Боты для WoW)
Автор: terrikon
Последнее сообщение в 18:39
PvE руководство для Чернокнижн... · (Чернокнижник)
Автор: Darkensand
Последнее сообщение в 18:38
Пустой свиток (Часть 11) · (Истории WoW)
Автор: R_a_Z_o_R
Последнее сообщение в 18:37
Друиды в Катаклизме: Официальн... · (Друид)
Автор: Darkensand
Последнее сообщение в 18:37
[Баг 3.3.5] Фарм ледяных бадже... · (Читы для WoW)
Автор: Darkensand
Последнее сообщение в 18:35
FarmBot (Бот для фарма руды и ... · (Боты для WoW)
Автор: homma
Последнее сообщение в 18:34
Почему мы сражаемся: ролевая и... · (Воин)
Автор: Darkensand
Последнее сообщение в 18:34
Книги по Wold of Warcraft · (Истории WoW)
Автор: R_a_Z_o_R
Последнее сообщение в 18:33
Маг огня в Cataclysm · (Маг)
Автор: Darkensand
Последнее сообщение в 18:33
Как начать играть в World of W... · (Полезно знать)
Автор: Belkmondesh
Последнее сообщение в 18:32
Характеризация профессий · (Профессии)
Автор: Darkensand
Последнее сообщение в 18:31
Что значит для арканов бета те... · (Маг)
Автор: Darkensand
Последнее сообщение в 18:31

Контакты Контакты Copyright WoW-Info — World of Warcraft портал © 2025 | Условия и правила использования ресурса | Реклама / Услуги
WoW-Info портал.World of Warcraft портал — готовые сервера, сайты, картинки, аддоны, патчи, читы, баги, mangos, ArcEmu, TrinityCore, Warcraft 3, новости, Cataclysm...
Яндекс.Метрика Хостинг від uCoz