Доброго времени суток!
Ниже представлен код, в котором работают сессии, но я не могу понять: как сделать кнопку для выхода (разлогина)? В коде же есть эта кнопка, но она не работает (почему?).
Подскажите, пожалуйста, почему не работает эта кнопка и как сделать не кривой выход из сессии чтобы при нажатии кнопки выхода юзверю показалась главная форма с окном ввода логина/пароля?
Сейчас этот код по нажатию кнопки выхода в адресную строку отправляет просто "localhost/test.php?", то есть, без должных "gtfo=true". Но даже несмотря на это, если вручную всё дописать, то выхода не происходит.
s_user и s_pass - для того, чтобы передать данные из $_SESSION[] в connect().
Спасибо.
-------------------------------------------------------------------------
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<head>
<title>test</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<?php
$logout = $_GET['logout'];
$testbox = $_GET['testbox'];
$script = $_SERVER['PHP_SELF'];
if (!isset($_SESSION['s_pass'])) {
$_SESSION['s_user'] = $_GET['user'];
$_SESSION['s_pass'] = $_GET['pass'];
}
$s_user = $_SESSION['s_user'];
$s_pass = $_SESSION['s_pass'];
$host = 'localhost';
$user = $_GET['user'];
$pass = $_GET['pass'];
function connect($host, $s_user, $s_pass) {
$connection = mysql_connect($host, $s_user, $s_pass);
if (!$connection) {
die (mysql_error());
}
}
if (!($s_user AND $s_pass)) {
echo('
<form action="'.$script.'" method="GET">
<input type="text" name="user" placeholder="user"/><br/>
<input type="password" name="pass" placeholder="pass"/><br/>
<input type="submit"/>
</form>
');
}
if ($s_user AND $s_pass) {
connect($host, $s_user, $s_pass);
echo ('
<form action="'.$script.'" method="GET">
<input type="checkbox" name="textbox"/>
<input type="submit" formaction="'.$script.'?gtfo=true" value="gtfo"/>
<input type="submit"/>
</form>
');
}
echo '<hr/>testbox = '.$testbox;
mysql_close($connection);
if ($gtfo == TRUE) {
unset($_SESSION['s_user'], $_SESSION['s_pass']);
session_unset();
session_destroy();
}
?>
</body>
</html>
Примечание:
NetRain, cgfсибо Вам за продробные объяснения! Предпочитаю принцип изучения "делай, находи ошибки, исправляй, делай и никому не мешай пока не научишься делать без ошибок с пониманием почему".
Да, с mysql_close() я действительно глупую ошибку совершил, но не увидел.
Про URL формы и GET не знал, спасибо! Думал сделать переход обычной конкатенацией адреса.
Про скрытую форму. Если она будет принимать всегда TRUE, то я правильно понимаю, что необходимо будет создать вторую, отдельную от чекбокса, форму для скрытого поля логаута и кнопки этого действия?
Примечание:
Насчёт session_destroy(). Достаточно ли будет просто перенести условие разрушения сессии в часть кода сразу после session_start() - до любого вывода?
Примечание:
Ошибка успешно найдена собственными усилиями.
Решилось путём добавления отдельной формы со скрытым значением для кнопки выхода, а так же добавлением проверки (а не только установления) сессий в заголовок.
Верный, работающий код, ниже:
[code]
<?
session_start();
if ($_POST['logout']) {
session_unset();
}
?>
<!DOCTYPE html>
<html>
<head>
<title>test sessions</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<?php
$testbox = $_POST['testbox'];
$script = $_SERVER['PHP_SELF'];
if (!isset($_SESSION['s_pass'])) {
$_SESSION['s_user'] = $_POST['user'];
$_SESSION['s_pass'] = $_POST['pass'];
}
$s_user = $_SESSION['s_user'];
$s_pass = $_SESSION['s_pass'];
$host = 'localhost';
$user = $_POST['user'];
$pass = $_POST['pass'];
function connect($host, $s_user, $s_pass) {
$connection = mysql_connect($host, $s_user, $s_pass);
if (!$connection) {
die (mysql_error());
}
}
if (!($s_user AND $s_pass)) {
echo('
<form name="login" action="'.$script.'" method="POST">
<input type="text" name="user" placeholder="user"/><br/>
<input type="password" name="pass" placeholder="pass"/><br/>
<input type="submit" value="Login"/>
</form>
');
}
if ($s_user AND $s_pass) {
connect($host, $s_user, $s_pass);
echo ('
<form name="checkboxform" action="'.$script.'" method="POST">
<input type="checkbox" name="testbox"/>
<input type="submit" name="checkboxform" value="CheckboxButton"/>
</form>
<form action="'.$script.'" method="POST">
<input type="hidden" value="1" name="logout"/>
<input type="submit" value="GTFO"/>
</form>
');
}
echo '<hr/>testbox = '.$testbox.'<br/>';
?>
</body>
</html>
[/code]
Примечание:
NetRain, спасибо Вам за наводку и полное описание! Это очень помогло в решении и в процессе понимания.