Autor Zpráva
Zoufalec
Profil *
Jak je to s chováním přihlašovacího skriptu, pokud se použije tlačítko "zpět" na prohlížeči?
Příklad: Mám 2 stránky
<?php
// stránka login.php

include "../mysql_class.php";
include "../db_connect.php";
include "../funkce.php";
$steno->connect();
$steno->select();
if (($_SERVER['REQUEST_METHOD']=='POST') && (isset($_POST['log_in'], $_POST['editor_user'], $_POST['editor_pass'])))
{
$error_string='';
$_POST['editor_user']=trim($_POST['editor_user']);
$_POST['editor_pass']=trim($_POST['editor_pass']);
if ($_POST['editor_user']=='' || $_POST['editor_pass']=='') { $error_string='Chyba: Přihlašovací jméno nebo heslo nebylo zadáno.'; }
if (empty($error_string))
{
// echo $_POST['editor_user'];
// echo $_POST['editor_pass'];
$steno->query(sprintf("SELECT * FROM users WHERE user_name='%s'", quote_smart($_POST['editor_user'])));
list($user_id, $user_name, $user_password) = $steno->fetchRow();
if (!(crypt($_POST['editor_pass'],$user_password) == $user_password) || ($steno->numRows()!=1)) { $error_string='<p>Chyba: Přihlašovací jméno nebo heslo bylo zadáno chybně</p>'; }
else
{
session_start();
$_SESSION['user_id'] = $user_id;
$_SESSION['user_password'] = $user_password;
header ('Location: http://'.$_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].dirname($ _SERVER['SCRIPT_NAME']).'/index.php');
exit;
}
}
}
// if (!isset($_SESSION['user_id']) || !isset($_SESSION['user_password'])) { $error_string=' '; }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="Wed, 30 Jan 2003 21:29:02 GMT" />
<link href="styly-login.css" rel="stylesheet" type="text/css" />
<title>přihlášení</title>
</head>
<body>
<div class="celek"><h2>PŘIHLÁŠENÍ</h2>
<h3><?php echo $error_string ?></h3>
<form name="form1" id="form1" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>">
<dl>
<dt>Přihlašovací jméno:</dt>
<dd><input name="editor_user" type="text" value="" size="20" maxlength="20" /></dd>
<dt>Heslo:</dt>
<dd><input name="editor_pass" type="password" value="" size="20" maxlength="20" /></dd>
</dl>
<br />
<input name="log_in" type="submit" value="Přihlásit" />
</form>
</div>
</body>
</html>



<?php
// stránka index.php
session_save_path('C:\www\editor\tmp');
session_start();
if (!isset($_SESSION['user_id']) || !isset($_SESSION['user_password']))
{
$_SESSION = array();
session_unset();
session_destroy();
header ('Location: http://'.$_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].dirname($ _SERVER['SCRIPT_NAME']).'/login.php');
exit;
}
// include "check_login.php";
// echo $_SERVER['SCRIPT_NAME'];
// echo $_SERVER['SERVER_NAME'];
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="Wed, 30 Jan 2003 21:29:02 GMT" />
<title>Editor</title>
</head>
<body>
<?php
echo '<p>Přihlásil se uživatel č: '.$_SESSION['user_id'].'</p>';
echo var_dump(session_get_cookie_params());
echo var_dump(session_id());
// echo $_SERVER['SERVER_NAME'];
?>
</body>
</html>

Předpokládám, že otevřu prohlížeč na stránce index.php. Nejsem přihlášen, tudíž mě hned přesměruje na login.php. Tam se přihlásím, jsem ověřen, začnu session a přesměruji se na stránku index.php, hde jsem již ověřen a zobrazí se mi tedy obsah. A teď: Tlačítkem "zpět" u prohlížeče se vrátím na stránku login.php a zadám jméno a heslo jiného uživatele. Po přihlášení jsem sice opět vpuštěn na obsah stránky index.php, ale v datech session se objevují data původně přihlášeného uživatele. Proč ne toho druhého? Díky za odpovědi...
Toto téma je uzamčeno. Odpověď nelze zaslat.