Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Cookies or Sessions?


Автор: Рейкин 4.6.2004, 10:16
Опять, как водится, сначала поискал по форуму. Ответа на искомую задачу не нашёл sad.gif

Я пишу онлайн-игру. Необходимо, чтоб вошедший в систему участник (логин, пароль) мог передвигаться по сайту (игре) и чтоб игра его узнавала.

Если это куки, то они должны "умереть" с покиданием участником сайта - знаю - что это случится в установках cookies по умолчанию.

Если это куки (моё решение), а я думаю, что да, то...
1) Как мне прописать их.
2) Как отслеживать/сравнивать/узнавать игрока по ходу "пьесы" (и надо ли в этом случае запоминать пароль в куках, или просто - вошёл правильно, записываем только логин и от него пляшем)?


Буду благодарен за помощь. Надеюсь задачу изложил полно.

Автор: Master 4.6.2004, 11:17
http://faq.phpclub.ru/practice.sessions.html

Думаю что там содержиться полный ответ на вопрос.

Автор: Рейкин 4.6.2004, 14:35
Так пытаюсь прописать Куки.
Код
<?

if($HTTP_COOKIE_VARS["loginname"] == "zorro") {
header("Location: go.php");
} else {

$file = file("text.txt");
$num = count($file);
for ($i=0; $i<=$num-1;$i++)
list($name,$pass,$email,$end) = split("*|*", $file[$i]);
{
if ((strcmp($loginname, $name)==0) and (strcmp($parol, $pass)==0))
 {
 $access = "ok";
 }

}

if ($access == "ok")
{
setcookie("loginname", $loginname, time(), "/", ".mysite.com", 0);
setcookie("parol", $parol, time(), "/", ".mysite.com", 0);
print "
  Поздравляем, вы удачно вошли в систему! <a href=\"go.php\">Вам сюда!</a>
  ";
}
else
{
print "
Введите верный логин и пароль:<br>
<form action=\"set.php\" method=post>
Логин: <input type=text name=loginname size=25 maxlength=25>
<br> Пароль: <input type=password name=parol size=25 maxlength=25>
<input type=\"submit\" value=\"войти в админ-модуль\">
</form>

  ";
}
}
?>


Залогиниваюсь - header не срабатывает, но пишет -
Поздравляем, вы удачно вошли в систему! <a href=\"go.php\">Вам сюда!</a>

Оки, на всякий случай дам go.php
Код
<?
$user = $_COOKIE["loginname"];

print $user;
?>


ничо не печатает...

Вопрос первый - чо я не так прописал? Как надо?
Второй - как "иметь постоянно" то, что прописал в куки (логин)?

Жду ответа.

Насчёт ссылки...

Громоздко и непонятно...

Автор: Master 4.6.2004, 14:52
Код
setcookie("loginname", $loginname, time(), "/", ".mysite.com", 0);
setcookie("parol", $parol, time(), "/", ".mysite.com", 0);

я щас умру... дружок... срок жизни твоих куков устанавливается до времени их установления.

Автор: Chuck 4.6.2004, 15:09
А не проще ли просто использовать сессию???
Запись: $_SESSION['password'] = 'pass'; $_SESSION['login'] = 'user';
Чтение: $pass = $SESSION['password']; $user = $SESSION['login'];
Сессия умрет, как только юзер покинет сайт! Ты просто проверяй, пароль и логин в каждом скрипте!!!
Может я и ошибаюсь, или что-то не правильно понял, но сессии тут как раз годятся!!! (кто знает, работают у юзера куки???)

Автор: Рейкин 4.6.2004, 15:33
Цитата
А не проще ли просто использовать сессию???
Запись: $_SESSION['password'] = 'pass'; $_SESSION['login'] = 'user';
Чтение: $pass = $SESSION['password']; $user = $SESSION['login'];
Сессия умрет, как только юзер покинет сайт! Ты просто проверяй, пароль и логин в каждом скрипте!!!


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

Цитата
я щас умру... дружок... срок жизни твоих куков устанавливается до времени их установления.

Пока не умер - скажи как сделать надо и чтоб куки были недействительны, когда сайт покинут? biggrin.gif

Автор: Рейкин 4.6.2004, 23:23
Перечитал. Не понял. Как прописать, куда прописать. Как организуется сессия, с чём её сравнивать.
Как найти что прочитать - я могу и сам, поверьте. Я тут, потому что в тупике. Или вы слишком высоко себя посадили, что слышать не хотите?

Автор: Chuck 5.6.2004, 08:11
Дружок все очень просто ты проверяешь раз!!! а потом создаешь переменную например
if ($_SESSION['pass'] == 'pass') {$_SESSION['mojno'] = 1;}
else {$_SESSION['mojno'] = 0;}
А в скриптах проверяешь если можно = 1 то вперёд, а равон 0 то нельзя аксес денайдед smile.gif)

Автор: Рейкин 5.6.2004, 09:54
Ага... Теперь теплей.
Т.е. $_SESSION - временный заменитель пароля?!

А как линкам передавать это дело? (с form дело проще).

Везде написано "и линки из index.php превращаются index.php?fnhhjhr83494345u20....."

Как и в какой момент это делается?

Автор: Рейкин 5.6.2004, 11:22
Код
<?

$file = file("text.txt");
$num = count($file);
for ($i=0; $i<=$num-1;$i++)
list($name,$pass,$email,$end) = split("*|*", $file[$i]);
{
if ($loginname == $name and $parol == $pass)
 {
 $access = "ok";
 }

}
if ($access == "ok")
 {
 session_start();
 session_register('login');
 $login=$loginname;
 print "
 <b>$login</b>, hi! <a href=\"go.php\">Вам сюда</a>";
 }
else
{
print "
Введите верный логин и пароль:<br>
<form action=\"check.php\" method=get>
Логин: <input type=text name=loginname size=25 maxlength=25>
<br> Пароль: <input type=password name=parol size=25 maxlength=25>
<input type=\"submit\" value=\"войти\">
</form>

  ";
}

?>


Имею
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /home/mysite/html/prog/check.php:9) in /home/mysite/html/prog/check.php on line 16

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/mysite/html/prog/check.php:9) in /home/mysite/html/prog/check.php on line 16
reyus
, hi! Вам сюда



Вот те и мануалы...

Автор: Piphon 5.6.2004, 11:52
Сессию стартуй в самом начале, т.е. до отправки тела сайта, как и куки.

И стартуй её на каждой странице которая будет обращатся к переменным в сесси.

P.S. Не знаю правельно объяснил...

Автор: Secandr 5.6.2004, 12:00
Piphon
правильно.
session_start(); - должен идти перым оператором.

А ещё не помешает разделять контент и код smile.gif ИМХО

Автор: Рейкин 5.6.2004, 13:03
Пробуем...

Автор: Рейкин 5.6.2004, 13:31
получаем....

check.php
Код
<?
print "
Введите верный логин и пароль:<br>
<form action=\"go.php\" method=get>
Логин: <input type=text name=loginname size=25 maxlength=25>
<br> Пароль: <input type=password name=parol size=25 maxlength=25>
<input type=\"submit\" value=\"войти\">
</form>

  ";


?>


go.php
Код
<?
session_start();


$file = file("text.txt");
$num = count($file);
for ($i=0; $i<=$num-1;$i++)
list($name,$pass,$email,$end) = split("*|*", $file[$i]);
{
if ($loginname == $name and $parol == $pass)
 {
session_register('login');
$login=$loginname;  
header("Location: welcome.php");
 $access++;
 }
}
if ($access<1)
header("Location: check.php");
?>


welcome.php
Код
<?
session_start();
 session_register('login');
if (isset($login))
 print "Hello, $login";
else
print "No login!";

?>


Результат - загрузка welcome.php
Hello, reyus

Спасибо большое! Всем, кто помогал и помогает!!! hehe.gif

P.S. Надеюсь всё будет работать хорошо и дальше.
P.P.S. Уверен, что это хороший и ясный пример новичкам, как я!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)