Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сессии и Куки
 
 автор: Sin   (13.11.2004 в 20:12)   письмо автору
 
 

У меня вот такой вопросик сам сабой возник. А куда девается ссесия если юзер не перешел на страницу по ее уничтожению.

   
 
 автор: Akira   (13.11.2004 в 20:20)   письмо автору
 
   для: Sin   (13.11.2004 в 20:12)
 

По моим наблюдениям не куда не деваеться , если не сделать новый индитификатор =) Поправьте меня если я ошибаюсь

   
 
 автор: cheops   (13.11.2004 в 20:24)   письмо автору
 
   для: Sin   (13.11.2004 в 20:12)
 

В php.ini имеется директива session.cookie_lifetime, которая определяет время жизнии сессии (обычно от нескольких минут до часа) - по истечении этого времени сессия уничтожается автоматически.

   
 
 автор: Akira   (13.11.2004 в 20:47)   письмо автору
 
   для: cheops   (13.11.2004 в 20:24)
 

А стандарт какой?

   
 
 автор: cheops   (13.11.2004 в 21:31)   письмо автору
 
   для: Akira   (13.11.2004 в 20:47)
 

Хм... стандарт имеется ввиду по времени или по такому использованию сессий? Я не помню, к сожалению, номер RFC, но там помоему явно не прописывается сколько времени должна хранится сессия, а описывается лишь поведение... PHP можно настроить на любое время от секунды, до бесконечности (сессии будут хранится вечно) - это определяется политикой администрирования (здесь стандарта нет, в PHP по крайней мере). Вообще, конечно, теоретически если директива установлена в 0, сессии уничтожатся не будут, но администратор сервера рискует оставить его через некоторое время без дескрипторов, поэтому время обычно выставляется...

   
 
 автор: Sin   (13.11.2004 в 20:53)   письмо автору
 
   для: cheops   (13.11.2004 в 20:24)
 

А заначит если юзер ее сам не унечтожет то она сама уничтожается.
А вот я еще хочу спросить стоит ли с помощью ссесий определять админ или нет. Допустим если админ то на странице выводятся дополнительные кнопочи, а их вывод проверить допустим таким скриптом

<?php
if($_session['status']="admin") { Выводится одно }
else { 
выводится другое }

или это не надежно?

   
 
 автор: cheops   (13.11.2004 в 21:25)   письмо автору
 
   для: Sin   (13.11.2004 в 20:53)
 

>определять админ или нет. Допустим если админ то на странице
>выводятся дополнительные кнопочи
Вообще-то если таким образом строить систему администрирования, то сессии пойдут, но лучше все скрипты по администрированию вынести в отдельную директорию и защитить её средствами Apache. Так как в при интеграции средств администрирования в пользовательский интерфейс сильно возрастает вероятность появления дырок.

   
 
 автор: Akira   (13.11.2004 в 22:31)   письмо автору
 
   для: cheops   (13.11.2004 в 21:25)
 

Apache сколько в этом слове =) Но ведь не на нем свет сошелся =) По моему есть и другие сервера. И мне не думаеться, админ-панель стоит защищать средствами Apache если это просто малопосещаемый форум =)

   
 
 автор: cheops   (14.11.2004 в 11:50)   письмо автору
 
   для: Akira   (13.11.2004 в 22:31)
 

> Но ведь не на нем свет
>сошелся =)
В общем да, но кривульки Netcraft впечатляют - Apache на настоящий момент установлен на 70% серверов мира, Microsoft - 20%, все остальные - 10%. Нужно сказать в РФ перекос в сторону Apache ещё выше.

PS Забавно, давно на этот сайт не ходил - все маркетинговые усилия Microsoft в течении 2-х лет пропали даром - люди было ринулись, а потом плюнули и поставили Apache обратно :)))

   
 
 автор: Akira   (13.11.2004 в 21:09)   письмо автору
 
   для: Sin   (13.11.2004 в 20:12)
 

Сначало нужно разобрать что такое сессия =) она просто позволяет передовать переменные и узновать по индитификатору = ) Для опр Админу юзай куки =)

   
 
 автор: Sin   (13.11.2004 в 22:28)   письмо автору
 
   для: Akira   (13.11.2004 в 21:09)
 

Вот теперь мне открываются глаза. Спасибо cheops за совет. Теперь будем мучать куки. Я в куках ни как не могу понять как данные зашифрованные в них попадают обратно в скрипт при входе юзера на сайт. Как отослать я примерно знаю. А вот как получить их ума не приложу. (хотя его у меня нету) :0)

   
 
 автор: cheops   (14.11.2004 в 11:53)   письмо автору
 
   для: Sin   (13.11.2004 в 22:28)
 

В скрипте их к ним можно обратится как к элементам суперглобального массива $_COOKIE, в качестве индекса которого выступает имя cookie.

PS Здесь важно установить время cookie - если этого не сделать - жить они будет только до момента закрытия браузера.

   
 
 автор: Sin   (14.11.2004 в 13:24)   письмо автору
 
   для: cheops   (14.11.2004 в 11:53)
 

1)А какое самое оптимальное время жизни куки?
2)Как я понял к каждой куки можно прикрепить только одно значение?
Это значит чтобы определить имя юзера и его статут нужно две куки посылать?
3)А вот я ввидел в форуме от phpBB внизу страницы выводится строчка перейти в админестраторский раздел - если ты админ конечно, вот поэтому я и спрашивал про определение статуса по ссесии, я думал там они так определяются. Вы не сталкивались с этими скриптами? Почему они решили сделать так? Может я чегото не понимаю, но они какимто макаром смогли защетить эту дыру.

   
 
 автор: cheops   (14.11.2004 в 14:08)   письмо автору
 
   для: Sin   (14.11.2004 в 13:24)
 

1) Время жизни cookies определяется задачей - это может быть и несколько минут и несколько часов - на этом форуме время жизни выставлено в 2 дня. Более подробно времена жизни сессий и куков обсуждались по теме
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=522
Стандарта нет, некотрые и на 100 лет выставляют, желая предоставить посетителям более удобный интерфейс.
2) Да, нужно посылать две куки или упаковать массив в строку при помощи функции serialize() (http://www.softtime.ru/dic/id_dic=263&id_group=9), а потом распаковать его при помощи unserialize() (http://www.softtime.ru/dic/id_dic=266&id_group=9)
3) Форум phpBB очень старый форум и очень распространнённый - его код тщательно вылизан. Можно конечно использовать переход на страницу администрирования и таким образом (хотя я не советовал бы оставлять ссылку на виду у всех) - но нужно тщательно следить за тем, чтобы тутда не попал злоумышленник обходным путём - подобрав соотвествующим образом параметры. Так можно поступать, только придётся потратить очень много усилий, чтобы защитить код как следует. Здесь дело не в сессиях (сессии как раз при таком подходе самое подходящее средство), а в расположении системы администрирования.

   
 
 автор: Sin   (14.11.2004 в 19:23)   письмо автору
 
   для: cheops   (14.11.2004 в 14:08)
 

А как правильно выставить время куки на неделю?

   
 
 автор: cheops   (14.11.2004 в 20:38)   письмо автору
 
   для: Sin   (14.11.2004 в 19:23)
 

Время передаётся в третьем параметре функции setcookie. Установка cookie на неделю может выглядеть следующим образом:
<?php
  setcookie
("test""value"time() + 3600*24*7);
?>

   
 
 автор: Sin   (15.11.2004 в 00:50)   письмо автору
 
   для: cheops   (14.11.2004 в 20:38)
 

А не подскажете как лучше всего сделать переход в админестраторский раздел? У меня опыта нету, просто хотелось бы послушать ваше проффесиональное мнение. :0)

   
 
 автор: cheops   (15.11.2004 в 01:01)   письмо автору
 
   для: Sin   (15.11.2004 в 00:50)
 

Придумать какой-нибудь невероятный путь, но легкозапоминаемый, например матерный :))) - запомнить его, никому не говорить и набирать его вручную или поместить в Закладки. Чем меньше народу о нём знает, тем лучше.

   
 
 автор: Sin   (15.11.2004 в 07:20)   письмо автору
 
   для: cheops   (15.11.2004 в 01:01)
 

Хи-хи. Эта конечно очень надежно, но а как быть если я буду пользоваться не адин этим разделом, мне будут помогать юзеры, которым выставлен статус модератора.

   
 
 автор: cheops   (15.11.2004 в 13:19)   письмо автору
 
   для: Sin   (15.11.2004 в 07:20)
 

В любом случае лучше не писать "Администрирование", заменить лучше каким-то нейтральным словом вроде "Расширенный режим" или ещё что-в этом духе...

   
 
 автор: Sin   (15.11.2004 в 14:48)   письмо автору
 
   для: cheops   (15.11.2004 в 13:19)
 

Не это я понял, спасибо. Вне вот интересен сам момент перехода к администрированию, как лучше его осуществить с вашей точки зрения. Можно конечно вводить код в определенном месте, но это конечно все время будет доставать. Вот вы бы как сделали? При условии что админ. раздел находится отдельно и использовать его будут не только я но и юзеры которым выставлен статус модераторов.

   
 
 автор: cheops   (15.11.2004 в 16:01)   письмо автору
 
   для: Sin   (15.11.2004 в 14:48)
 

Можно для администраторов завести отдельную таблицу которая будет опеределять кто имеет админские права, а кто нет. Если посетитель-администратор авторизуется то вывести ссылку на страницу администрирования. На каждой странице администрирования вначале включить блок проверки
<?php
  
include "verificate.php";
?>

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

   
 
 автор: Sin   (15.11.2004 в 18:40)   письмо автору
 
   для: cheops   (15.11.2004 в 16:01)
 

Спасибо, примерно смысл монял, теперь есть пища для размышления. Ну и как всегда еще вопрос:
А вот обновлять куки следует при каждом заходе юзера на сайт? Или какимто другим способом их нужно обновлять?

   
 
 автор: cheops   (15.11.2004 в 18:49)   письмо автору
 
   для: Sin   (15.11.2004 в 18:40)
 

Всё зависит от целей, если цель куков избавить посетителей от частой раздражающей авторизации, наверное лучше обновлять куки при каждом заходе, тогда у активных посетителей (которые посещают сайт не реже чем выставлено время жизни куки) будет складываться впечатление, что сайт о них "помнит" постоянно. Если же цель, обратная, т.е. заставить посетителя через определённый временной интервал подтверждать свой пароль - тогда куки следует выставлять только один раз - во время авторизации.

   
 
 автор: Akira   (14.11.2004 в 20:52)   письмо автору
 
   для: cheops   (14.11.2004 в 14:08)
 

>Здесь дело не в сессиях (сессии как раз при таком
>подходе самое подходящее средство)
Согласен =) - только один =) не узнает автоматически =)
А так по моему сесси самый приемлемый вариант =)

   
 
 автор: alex777   (15.11.2004 в 22:13)
 
   для: Akira   (14.11.2004 в 20:52)
 

Cookie на мой взгляд вообще надо выключить.
А индификатор сессии от страницы к странице менять тогда прблем не будет...

 session_start();
   if (isset($_SESSION)){foreach ( $_SESSION as $key => $value ){$$key=$value;}}
   session_destroy();
   session_id(@md5(@uniqid(@rand())));
   session_register('password');
   session_register('name');

Если это не сделать, вы подвергаетесь риску обнаружить свой логин и пароль

   
 
 автор: antf   (23.01.2005 в 06:24)   письмо автору
 
   для: alex777   (15.11.2004 в 22:13)
 

Здраствуйте. А сессия и сеанс это синонимы или совершенно различные понятия?

   
 
 автор: cheops   (23.01.2005 в 12:31)   письмо автору
 
   для: antf   (23.01.2005 в 06:24)
 

Сессия - это по англицки, сеанс - по-русски :)

   
 
 автор: Be4ep   (18.02.2005 в 18:13)   письмо автору
 
   для: cheops   (23.01.2005 в 12:31)
 

ну посу ти то дела :))

   
 
 автор: Dimrix   (19.04.2005 в 09:31)   письмо автору
 
   для: alex777   (15.11.2004 в 22:13)
 

>Cookie на мой взгляд вообще надо выключить.
>А индификатор сессии от страницы к странице менять тогда
>прблем не будет...
>Если это не сделать, вы подвергаетесь риску обнаружить свой
>логин и пароль.
Я думал сессии хранятся на сервере и к ним доступа ни у кого нет, т.е. есть методы, которыми можно у сервера запросить логин и пароль? Я о индификаторе не слышал. Он автоматом создаётся?

   
 
 автор: Axxil   (19.04.2005 в 10:05)   письмо автору
 
   для: Dimrix   (19.04.2005 в 09:31)
 

Вообще идентификатор сессии это как удостоверение личности. И их лучше хранить в БД. И потом очень удобно в любом месте сайта проводить проверку прав пользователя. То есть делаем таблицу session:
SID u_id
(md5(идентификатор сессии)) (id юзера)

Далее например проверяем можно ли юзеру показывать ссылку "Расширенный режим" :)
<?
$query=mysql_query("select u_id from session where SID=".$_GLOBALS['SID']);
$r=mysql_fetch_accos($query);
if ($r['u_id']==1) echo "Расширенный режим";
?>
А ещё лучше в таблицу с юзерами добавить поле root где выставлять их права...

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования