[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сессии и Кукесы
ESSE
Всем добрый день. Вообщем сейчас пишу Личный Кабинет на PHP и понял что нужны Сессии и Кукесы. Но вот я почитал о них и не понял ничего абсолютно. прошу объясните мне с обычный точки зрения что это такое и как их применять. Заранее благодарю.



Спустя 17 минут, 44 секунды (7.02.2009 - 17:44) twin написал(а):
Кука это маленький файлик, который делает браузер на машине клиента. Туда записывается инфа, которую в эту куку прописывают. По этой информации при следующем заходе сервер понимает, что от него хотят.
Сессия это тоже самое, если грубо. Только файл создается не на машине пользователя, а на сервере. По этому ни кто кроме серверв не знает что в нем написано. А браузер делает такой же файлик, как в первом случае, только туда записывает ключ к файлу на сервере. По этому ключу сервер читает инфу из нужного места.

Вот так может понятнее будет:
PHP
<?php 
$cookie 
"А вот и Ваша кука. <a href='?delet=1'>Удалить</a>"
$test "Нет куки. <a href='?install=1'>Поставить</a>"
if(isset(
$_GET['delet'])) 

setcookie("test"""time()-3600*24 ); 
header("location: ".$_SERVER['PHP_SELF']); 

elseif(isset(
$_GET['install'])) 

setcookie("test"$cookietime()+3600*24*30); 
header("location: ".$_SERVER['PHP_SELF']); 

$test = isset($_COOKIE['test'])?$_COOKIE['test']:$test
echo 
$test;
Запустите и попробуйте.

Спустя 7 минут, 19 секунд (7.02.2009 - 17:51) ESSE написал(а):
twin Спасибочки огромное. но в моем случае они нужны да?

Спустя 24 секунды (7.02.2009 - 17:51) LoneCat написал(а):
Фуф, пространный вопрос smile.gif но всеже:

Cookies - это хреньсущность, благодаря которой можно сохранить информацию на компьютере пользователя, иже:
PHP
setcookie('test''tram-pam-pam');

сохранит у пользователя некую информацию, которую можно будет получить позже, через суперглобальный массив $_COOKIE, на той-же или другой странице того-же домена, например так:
PHP
echo $_COOKIE['test'];

Тоесть засчет кукисов можно передавать некую небольшую промежуточную информацию между страницами. Тут есть несколько моментов:
  • Кукисы передаются в http-заголовках, то есть их установку нужно производить до того как что-либо было выведено на экран
  • Кукисы не безопасны для хранения важных данных, злоумышленник легко может посмотреть какие кукисы ему прислал сервер, и заменить их значения, так что делать а-ля setcookie('admin', '1'); и if($_COOKIE['admin']) { - нельзя ни в коем случае.

Сессии - это тоже хрень сущность, которая позволяет скриптам хранить промежуточную информацию. Важное отличие сессий - они хранятся на сервере, пользователь не может их просмотреть, пользователь не может их изменить. Каким образом они работают?
PHP
session_start();

Эта команда инициализации сессии, она генерирует идентификатор сессии для конкретного пользователя, некий уникальный номер, и сообщает его пользователю, например через cookies. Итак пользователь заходит на сайт - сервер говорит ему - ты будешь пятым. При открытии следующей странице - пользователь отправляет этот идентификатор на сервер, говоря: "Я пятый!", сервер проверяет есть-ли у него такой идентификатор - и если есть - записывает в суперглобальный массив $_SESSION всю информацию, записанную в этот массив для этого пользователя. Пример:
PHP
// Файл 1.php
session_start();
$_SESSION['test'] = 'tratata';

PHP
// Файл 2.php
session_start();
print_r($_SESSION);

Зайдя на первую страницу - в массив сессии будет записана некоторая переменная, доступная потом на второй странице (как впрочем и на первой тоже). А если зайти другим браузером сразу на вторую страницу - выведется пустой массив, потому как кукиса с идентификатором в другом браузере нет, и сервер незнает что новозашедший пользователь - например пятый.
Особенности сессий:
  • Сессии безопасны для хранения приватных данных, так как хранятся на сервере, так как на сторону клиента передается только номер сессии.
  • Если используется механизм передачи идентификатора через кукисы - session_start() нужно выполнять опять-же до любого вывода на экран.

Спустя 12 минут, 16 секунд (7.02.2009 - 18:04) LoneCat написал(а):
Эх блин, пока писал мну опередили sad.gif

Спустя 2 минуты, 33 секунды (7.02.2009 - 18:06) ESSE написал(а):
LoneCat Неее, спасибо за такое четкое объяснение. спасибочки огромное!

Спустя 1 час, 23 минуты, 24 секунды (7.02.2009 - 19:30) twin написал(а):
Цитата
Эх блин, пока писал мну опередили
Оно как раз кстати, а то я предвидел, что после простого объяснения придется так же подробно расписчвать smile.gif

Спустя 29 минут, 5 секунд (7.02.2009 - 19:59) ESSE написал(а):
Вот код первойстраници index.php:

<html>
<head>
<title>Главная страница личного кабинета</title>
</head>

<body>


<form method="get" action="login.php" onsubmit="return checkform(this)" align=center>
<b>Логин:</b><br><br>
<input name="login" type="text">
<br><br>
<b>Пароль:</b><br><br>
<input name="pass" type="password">
<br><br>
<input type="submit" name="Submit" value="Вход">
</form>


</body>

</html>

А вот код страници login.php:

<html>
<head>
<title></title>
</head>

<body>

<?

$dbuser = "root";
$dbpass = "bcnbyfultnjnfv";
$dbhost = "192.168.1.3";
$dbname = "lineage2";

$fsname = $_SERVER['SCRIPT_NAME'];
$msconn = mysql_connect($dbhost, $dbuser, $dbpass) or die ("Ошибка соединения");
MYSQL_SELECT_DB($dbname) or die ("БД не найдена");

?>



<?

$login = $_POST[login];
$pass = $_POST[pass];

if ($login == "") {
echo ("<center>Вы не ввели логин</center>");
}else{

if ($pass == "") {
echo ("<center>Вы не ввели пароль</center>");
}else{

$q = mysql_query("SELECT * FROM accounts WHERE login='{$login}'");

$z = mysql_query("SELECT * FROM accounts WHERE password='{$pass}'");

if(!mysql_numrows($q) > "0" && base64_encode(pack("H*", sha1(utf8_encode($z)))) > "0")

{
echo ("<center>Вы не вошли</center>");
}


else

{
echo ("<center>Вы вошли в Кабинет</center>");
}




}

}


?>

</body></html>


Впринципи работает он на проверку из базы логина и пароля. Мне надосделать так чтобы когда я вошел, то высветилось имя аккаунта под которым я вошел и кнопочка выйти. И самое главное чтобы открылась страница которая бы была доступна если ты только авторизирован. Воть! Помогите пожайлуста. За это отвечает Сессии и Кукесы, да?

Спустя 26 минут, 19 секунд (7.02.2009 - 20:25) LoneCat написал(а):
Страница входа:
PHP
// Запускать сессию следует до любого вывода на страницу
session_start();

HTML
<html>
<head>
<title></title>
</head>

<body>

PHP
$dbuser "root";
$dbpass "bcnbyfultnjnfv";
$dbhost "192.168.1.3";
$dbname "lineage2";

$fsname $_SERVER['SCRIPT_NAME'];
$msconn mysql_connect($dbhost$dbuser$dbpass) or die ("Ошибка соединения");
mysql_select_db($dbname) or die ("БД не найдена");

$login $_POST['login'];
$pass $_POST['pass'];

if(
$login == "") {
    echo (
"<center>Вы не ввели логин</center>");
} else {
    if(
$pass == "") {
        echo (
"<center>Вы не ввели пароль</center>");
    } else {
        
// Здесь нужно подготовить данные к тому чтобы отправить их в запрос
        // Это важно, не экранированные данные в запросе - это серьезная уязвимость, практически парадная дверь для
        // злоумышленника к закрытой области вашего сайта и информации из вашей базы данных
        
$login mysql_real_escape_string($login);
        
$pass mysql_real_escape_string($pass);
        
// Выборку можно сделать одним запросом
        
$q mysql_query("SELECT * FROM accounts WHERE login='{$login}' AND pass='{$pass}'");
        
// Смысл кодировать полученные из базы данные и сравнивать их с нулем - не узрел, каюсь :)
        
if(mysql_numrows($q) === 1) {
            echo 
"<center>Вы вошли в Кабинет</center>";
            
// Записываем в сессию логин пользователя
            
$_SESSION['user'] = $login
        } else {
            echo 
"<center>Вы не вошли</center>"
        }
    }
}


Страница, доступная только авторизованным пользователям:
PHP
session_start();

HTML
<html>
<head>
<title></title>
</head>

<body>

PHP
if(isset($_SESSION['user'])) {
  echo 
'Данная страница доступна только авторизованным пользователям';
} else {
  echo 
'Вы вошли на страницу как: '.$_SESSION['user'];
  
// Код страницы
}

Страница выхода:
PHP
session_start();

HTML
<html>
<head>
<title></title>
</head>

<body>

PHP
// Уничтожает все данные, сохраненные в сессии
// В нашем случае только переменную user
session_destroy();

Спустя 19 минут, 22 секунды (7.02.2009 - 20:44) ESSE написал(а):
LoneCat - Спасибо вам огромнейшее за помощь и поклон вам. Вы очень сильно помогли. очень очень.

Спустя 20 минут, 28 секунд (7.02.2009 - 21:05) Sylex написал(а):
ESSE
смени аватар, а? Жуть ph34r.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.