Autor Zpráva
Michal110
Profil
Ahoj Lidi. Předem se omlouvám že tu zase škemrám o radu. Nejsem zvyklej že někdo něco dělá za

mě, ale potřeboval bych poradit. Vymyslel jsem si jednu "ptákovinu" které se chytlo dost lidí

a teď tu řeším problém se zprovozněním. Zkusím popsat co je v mém návrhu. Cílem je vytvořit

web (to zmáknu) kde jsou umístěny 2 tlačítka s funkcí zápisu hodnoty do txt souboru po jejich

stisknutí (to zmáknul uživatel TAPS,, díky). Dalším cílem je že tuto stránku bude využívat

více lidí postupně za sebou (nikdy ne současně), tudiž jsem laboroval a použil kód pro

zaheslování přístupu (to jsem zmáknul)-bohužel nutná změna hesla pro každého ale budiž.Jde mi

o to aby na stránce s tlačítky byl vždy jen jeden člověk. to jsem tak nějak vyřešil tím

heslem. Bohužel pokud se ale ten jeden člověk sám neodhlásí tak nastává problém s tím že může

dál klikat a měnit tak hodnoty v txt souboru,i když už mám změněno heslo pro hlavní přístup a

heslo má další člověk. Tím mužou klikat oba což je nežádoucí. u prvního člověka pomůže jen

zavření prohlížeče a znovuzadání adresy (načteno nové heslo).. Ptám se tedy.. Dá se nějakým

způsobem zadat automatické odhlášení uživatele třeba po 10 minutách? Nebo jiný způsob? příkaz

pro automatické odhlášení se mi nepodařilo rozběhat, zadával jsem ho do index.php. Asi to zní

trochu šíleně (celé je to šílené :-) ale jde mi jen o to aby klikat na tlačítko mohl vždy

jeden člověk.. V každém případě mě PHP docela vzalo, takže začínám studovat a zkoušet. Děkuji

všem za případné nápady. Zde uvádím strukturu souborů,

INDEX.PHP

<?
 require 'protection.php';
?>
</style>
<?
if(isset($_POST['off'])){
    file_put_contents('spinac.txt', 0);
}
elseif(isset($_POST['on'])){
    file_put_contents('spinac.txt', 1);    
}
 
$hodnota = file('spinac.txt');
$oznaceni[$hodnota[0]] = 'on';
 
echo'<form action="#" method="POST">
    <input type="submit" value="off" name="off" class="'.$oznaceni[0].'">
    <input type="submit" value="on" name="on" class="'.$oznaceni[1].'">
</form>';
 
?>

LOGIN.PHP

<?
 //Set up your login name and password here
 $user="test";
 $pass="1234";
 
//Which file 

be included after succesfull login?
 //kterou stránku otevřít po přihlášení?
 

$protected="index.php";
 //Enter relative path to zour CSS stylesheet file
 

//relativni adresa CSS souboru
 $css="styles.css";
 
//Delete unwanted language blocks
 

//Česky
 $auth="Přihlášení";
 $username="Uživatel";
 $password="Heslo";
 //English
 

$auth="Logon";
 $username="Username";
 $password="Password";
 
#End of 

configuration..............................................

if 

($_GET['action']=='validate'){
   if(($_POST['user']==$user)&&($_POST['passwd']==$pass)){
    

session_start();
     header("Cache-control: private");
     $_SESSION["user_is_logged"] = 

1;
     header("Location: ".$protected);
     exit;
   }
 }
?>


<!DOCTYPE html PUBLIC 

"-//W3C//DTD XHTML 1.1//EN"
 "[url=http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd]http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd[/url]">
<html>
 <head>
  

<title><? echo $auth; ?></title>
   <meta http-equiv="content-type" content="text/html; 

charset=iso-8859-2"/>
   <link rel="stylesheet" type="text/css" href="<? echo $css; ?>" />
 

</head>

<body> 
 <div id="container">
 <h1><?echo $auth;?></h1> 
 <form 

action="./login.php?action=validate" method="post">
   <table>
    <tr><td><? echo $username; 

?></td><td><input type="text" name="user" /></td></tr>
    <tr><td><? echo $password; 

?></td><td><input type="password" name="passwd" /></td></tr>
    <tr><td colspan="2"><input 

type="submit" value="..:: Okej ::.." />
    <input type="reset" value="..:: Storno ::.." 

/></td></tr>
   </table>
  </form>
  <hr />
  <p><small>This work is licensed under a 
  <a 

href="[url=http://creativecommons.org/licenses/by-nc-sa/1.0/">Creative]http://creativecommons.org/licenses/by-nc-sa/1.0/">Creative[/url] Commons License</a>.
   

Some rights reserved <a href="[url=http://jary.borec.cz/">Vladimír]http://jary.borec.cz/">Vladimír[/url] Jarý</a></small></p>
  </div>
 

</body>
</html>


PROTECTION.PHP

<?
# Verify if the user is logged-in
# Vladimir Jary, see [url=http://jary.borec.cz/]http://jary.borec.cz/[/url] for more info

//specify file, which will be included when user is not logged-in
 //Napiš soubor, který se zobrazí, pokud uživatel nen9 přihlášen
 $error_file="login.php";
 
session_start();
 header("Cache-control: private");
 if ($_SESSION["user_is_logged"] != 1){
  header("Location: ".$error_file);
  exit();
  }
?>

LOGOUT.PHP

<?
 # Logout script
 # Vladimir Jary, see [url=http://jary.borec.cz/]http://jary.borec.cz/[/url] for more info
 //Specify a file which will be displayed after logout
 //Vyberte soubor, který se zobrazí po odhlášení
 $logoutfile="logout.html";
 
session_start();
 $_SESSION = array();
 session_destroy();
 if ($_SESSION["user_is_logged"]){
  echo "FATAL ERROR: Cannot terminate session!";
  } else {
   header("Location: ".$logoutfile);
  }
?>
Alphard
Profil
Stačí pracovat s časem, do session neukládat jen hodnotu 1/0 jestli je uživatel přihlášen, ale uložit si čas, kdy se přihlásil/provedl poslední akci. Pokud na stránku přistoupí příliš pozdě, tak ho odhlásíte.
Michal110
Profil
díky za radu. Nad tím jsem taky uvažoval. Napadlo mě použít kód pro odhlášení uživatele po určité době, něco ve smyslu
<?php
if ($_SESSION["access_time"] < strtotime("-1 hour")) {
$_SESSION["logged"] = false;
}
$_SESSION["access_time"] = time();
?>

ale nedaří se mi to zprovoznit :-(


kde -1hour bych zadal -10 minutes? - v podstatě by mi stačilo aby každý měl přístup jen 10 minut a pak ho to vyhodilo na děkovnou stránku


nebo by stačilo aby se po 10minutách od přihlášení vyčistila session, tím pádem by při kliknutí byl zpět přesměrován na přihlašovací stránku.. Ale bohužel se mi nedaří to správně zakompilovat..
martin1312
Profil
K tomu časovemu limitu musíš pripočítať ešte aktuálny čas, až potom porovnať.
Michal110
Profil
Tak to už je nad rámec mých aktuálních schopností :-(. Sedím u toho dva dny, hlava jak patrona :-). Tlačí mě čas, proto mi nezbývá zadat to jako úkol za úplatu. Platbu provedu v hotovosti (pokud někdo poblíž Litoměřic) nebo bankovním převodem. Tedy záleží na ceně kterou odhaduji do max 1 tis Kč....

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: