|
|
|
| Привет народ!
Вот сейчас пишу страничку на php, нужна авторизация соотвственно мне, и вот тут столкнулся с проблемой (только недавно начал кодить), в чём состоит разница между cookies и session?? Что лучше? Что более надёжнее и что более быстродейственнее??
Заранее благодарен за ответ! | |
|
|
|
|
|
|
|
для: DiMoN_TD
(29.11.2007 в 09:59)
| | Сookies — файлы, хранящиеся на клиентской стороне.
Session — файлы, хранящиеся на сервере.
Кукисы можно подделать, украсть, а сессию только украсть. | |
|
|
|
|
|
|
|
для: Саня
(29.11.2007 в 10:14)
| | Ну, если вкратце, то да:)
Сессия - это сеанс, во время которого система различает различных пользователей. Реализуется она по-разному. В том числе, и при помощи cookies.
Как правильно написал Саня, куки - просто файлики, которые хранятся у клиента и посылаются каждый раз при посылке запроса на загрузку страницы с нужного домена. Проблемы тут не две, а три: куки можно не только подделать и украсть. Их еще можно не принимать. Тогда создать сессию не получится. (Правда, с отключенными кукисами ходят, пожалуй, только гики и извращенцы).
В пхп сессии реализуются довольно сложно, но эффективно. Сначала генерируется идентификатор сессии. Затем, на сервере создается файл, имя которого совпадает с этим идентификатором. В этот файл могут писаться какие-то данные о пользователе. Сам пользователь получает этот идентификатор сессии в cookie. Если куки у юзера отключены, то пхп начинает динамически изменять ссылки так, чтобы идентификатор сессии передавался в строке запроса, то есть, get-методом. Таким образом обеспечивается бОльшая надежность, по сравнению с использованием только куки.
Кроме того, при использовании пхп-сессий, клиент держит у себя только куку с идентификатором сессии, а все данные хранятся на сервере, поэтому подделать их(данные) нельзя. Можно только передать идентификатор не своей сессии, тогда получится кража сесии.
Нужно еще заметить, что механизм сессий в пхп работает все-таки с файлами, причем проводит их разбор, для вычленения данных, поэтому, этот метод работает несколько медленнее, чем создание сессии при помощи простых куков.
Что выбирать - решать нужно в зависимости от ситуации. Если нужна надежность, поддержка максимального количества юзверей, и быстрота не роляет - юзайте сессии. Если нужна скорость и простота - куки.
В конечном итоге, в пхп почти всегда для создания сессий нужно пользоваться пхп-шными сессиями. Куки применяют для запоминания некритичных данных о пользователе (логин для комментариев или настройки меню). | |
|
|
|
|
|
|
|
для: SHAman
(29.11.2007 в 12:46)
| | О, спасибо большое за объяснение.
А теперь можете объяснить принцип работы регистрации??
Именно не в виде кода, а как это должно происходить... Все темы с регистрацией я прочитал, но всё же у меня немного другого типа вопрос.
Вот допустим у меня есть индексная страница, на шапке всех моих страниц есть формочка для авторизации пользователя, есть страница register.php для регистрации, есть страница login.php собственно где происходит авторизация, после того, как юзер зарегался на сайте, ну и также есть страница check.php, как я понял проверяющая мои кукисы. Так вот, после того, как я зарегистрирован и авторизирован мне же нужно теперь показать, что я вошёл, тем, что все мои формочки для авторизации и регисрации исчезли, а значит при переходе на любую страницу мне нужно делать проверки, НО КАКИЕ ПРОВЕРКИ?? и как это можно реализовать??
Спасибо за ответ! | |
|
|
|
|
|
|
|
для: SHAman
(29.11.2007 в 12:46)
| | так что, никто не может мне помочь? | |
|
|
|
|
|
|
|
для: DiMoN_TD
(30.11.2007 в 09:13)
| | после успешной авторизации
заносим некий идентификатор нашего пользователя например его id из таблицы пользователей в сессиию
$_SESSION['valid_user']=$login->session;
затем проверяем
if($_SESSION['valid_user'])
{
echo 'секретная страница';
}
else {
echo 'для просмотра нужна авторизация';
}
в начале всех страниц первой строкой должно идти session_start();
а вообще удобнее использовать всего одну страницу - index.php;
и реализовать все по принципу:
if($_SESSION['valid_user']){
switch ($page)
{
case 'main';
include 'main.php';
break;
}
}
else {
include 'login.php';
}
получая page через get | |
|
|
|