Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как закрыть PHP-сессию? [помогите разобраться в сессиях...] 
:(
    Опции темы
Ivan1
Дата 11.2.2008, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 12.8.2007

Репутация: нет
Всего: нет



Я пишу скрипт админки для гостевой...Скажите почему когда я открваю скрипт $_s-сразу присваиваются значения и пропускается процесс авторизации...И как сделать так чтобы в указанном месте была ссылка для закрытия сессии...вообще как закончить и закрыть сессию???
Код

<?php
session_start();
session_register("s");
echo
"<title>Гостевая</title>
<HEAD>
<STYLE type='text/css'>
HR {border-top-width:0.3pt}
</STYLE>
</HEAD>
<h3>Админцентр</h3>
<hr>";
$aft=$_POST['aft'];
if(!empty($aft) or !isset($_s['name']))
{
$name=$_POST['name'];
$paroll=$_POST['paroll'];
 if($name=='ivan' and $paroll=='1' or $_s['paroll']='1')
 {
 $_s['name']='ivan';
 $_s['paroll']='1';
 <--Выводим сообщения-->
 Вот тут нужна ссылка для выхода из админки 
}
else
{
print "Данные введены неправильно<a href='admin.php'>Назад</a>";
};  
}
else
{
echo "
<FORM METHOD='post' ACTION='admin.php'>
<input type='hidden' name='aft' value='post'>
Ваше имя
<BR>
<INPUT TYPE='text' NAME='name' VALUE='$name' SIZE='20'>
<BR>
Пароль  
<BR>
<INPUT TYPE='password' NAME='paroll' VALUE='' SIZE='20'>
<BR>
<INPUT TYPE='submit' VALUE='Отправить'>";
};
?>


PM MAIL   Вверх
GeneralElectric
Дата 11.2.2008, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 13
Всего: 16



Во-первых, ты неправильно работаешь с сессиями. Никаких session_register!
Во-вторых, непонятно, чего ты вообще ждешь от переменной _s, если не регистрируешь её в сессии, даже кривой функцией.
В-третьих, убивает сессию, разумеется, функция session_destroy и непонятно, почему ты не заметил её в мануале

PM MAIL   Вверх
Ivan1
Дата 11.2.2008, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 12.8.2007

Репутация: нет
Всего: нет



Цитата(GeneralElectric @ 11.2.2008,  18:30)
Во-первых, ты неправильно работаешь с сессиями. Никаких session_register!
Во-вторых, непонятно, чего ты вообще ждешь от переменной _s, если не регистрируешь её в сессии, даже кривой функцией.
В-третьих, убивает сессию, разумеется, функция session_destroy и непонятно, почему ты не заметил её в мануале

Можешь тогда показать как правильно...
PM MAIL   Вверх
GeneralElectric
Дата 11.2.2008, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 13
Всего: 16



PM MAIL   Вверх
slavik_1790
Дата 12.2.2008, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 12.2.2008

Репутация: нет
Всего: нет



Форма:
Код

<form name="auth" action="auth.php" method="POST">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit" name="auth">


Обработчик auth.php:
Код

<?php
@ob_start();
session_name("admin");
session_start();
//Данные для доступа
$v_username="admin";
$v_password=md5('12345');
//Фильтрация данных
$inv=array("'", "*", "_", "-", "=", "+", "or", "`");
$username=strip_tags(trim(str_replace($inv, "", $_POST['username']));
$password=strip_tags(trim(str_replace($inv, "", $_POST['password']));
if ((empty($username) or (empty($password))) {
     echo "Пожалуйста, заполните все поля формы";
}
else {
     if (($username != $v_username) or (md5($password) != $v_password)) {
          echo "Неверный логин или пароль";
     }
     else {
            $_SESSION['username']=$username;
            $_SESSION['password']=$password;
            @header("Location: admin/");
      }
}
?>

//На каждой странице админки проверяешь, если сессия пустая, направляешь пользователя к форме

<?php
@ob_start();
session_name("admin");
session_start();
if (empty($_SESSION['username'])) {
    @header("Location: login_form.php");
}
else {
     //Здесь вставляй то, что будет показыватся если сессия не пустая
}
?>
     

Закрыть сессию:
Код

<?php
@ob_start();
session_name("admin");
session_start();
session_destroy();
@header("Location: login_form.php");
?>


Пиши если что не понятно.

Советую почитать:
http://php.net/session_start
http://php.net/session_destroy

    


Это сообщение отредактировал(а) slavik_1790 - 12.2.2008, 01:42
PM MAIL   Вверх
Ivan1
Дата 12.2.2008, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 12.8.2007

Репутация: нет
Всего: нет



slavik_1790, а зачем нужна вот эта строка:
Код

@header("Location: admin/");

PM MAIL   Вверх
GeneralElectric
Дата 12.2.2008, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 13
Всего: 16



Мда. у меня, к примеру, гораздо больше строчек вызвали вопросы =)
А эта - самая простая. Хоть и неправильная.

попробуй сделать без неё, и после ввода пароля нажать в браузере "обновить страницу"
и сразу поймешь, зачем она нужна =)

Но писать её надо не так. Во-первых, в неё надо писать адрес страницы, на которю ты хочешь попасть после авторизации, а во-вторых, писать этот адрес надо не так, как будто за тобой кто-то гонится, а по стандарту. То есть - полный URL
если админка находится по адресу http://www.site.ru/admin/ то писать этот адрес.
чтобы сделать универсальную функцию, можно написать

Код

header("Location: http://".$_SERVER['HTTP_HOST']."/admin/");
exit;


Добавлено через 9 минут и 23 секунды
Да, и, разумеется, @ перед именем функции быть не должно.
Автор кода очень слабо представляет себе как действие функции header, так и оператора @. И вообще имеет смутное представление об ошибках и их обработке.
PM MAIL   Вверх
slavik_1790
Дата 12.2.2008, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 12.2.2008

Репутация: нет
Всего: нет



Цитата(Ivan1 @ 12.2.2008,  11:06)
slavik_1790, а зачем нужна вот эта строка:
Код

@header("Location: admin/");

@header("Location: admin/");
На русском языке это так:
Перенести пользователя на страницу admin/

http://php.net/header - Советую почитать

Это сообщение отредактировал(а) slavik_1790 - 12.2.2008, 14:05
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0463 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.