Vypršení Sessions – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Vypršení Sessions – PHP – Fórum – Programujte.comVypršení Sessions – PHP – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Yohaku0
Návštěvník
23. 8. 2012   #1
-
0
-

Dobrý den,

mám takový problém. Na stránce vypisuji online uživatele tím způsobem, že při přihlášení se v databázi sloupec "prihlasen" v příslušné řádce změní na "1". A při odhlášení na "0". Jenže když uživatel neklikne na tlačítko "Odhlásit" (například prostě jen zavře prohlížeč), hodnota v databázi zůstane "1", a tím ho pořád ukazuje jako "online".

Neměl by někdo řešení? Myslel jsem na akci pro vypršení platnosti session, ale nevím jak to udělat...

Nahlásit jako SPAM
IP: 85.207.18.–
V těch nejtěžších chvílích se otoč za sluncem a všechny stíny padnou za tebe. - John Lenon
z_moravec
~ Redaktor
+3
Posthunter
23. 8. 2012   #2
-
+1
-
Zajímavé

#1 Yohaku
To se dá udělat několika způsoby. Nejjednodušší je asi ukládat i čas poslední akce a pak pomocí cronu, třeba každých pět minut (pokud nemáš cron, tak to jde dělat i bez něj, ale je to náročnější), kontrolovat tabulku a nastavovat příznak odhlášen pro uživatele, kteří po určitou dobu nic neudělali.

Nahlásit jako SPAM
IP: 147.251.29.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
Yohaku0
Návštěvník
23. 8. 2012   #3
-
0
-

Děkuji, takže na každé stránce mám v databázi upravit čas např: "12:32",  uživatel překlikne a upraví se na "13:00". Ale dál nevím...

Nahlásit jako SPAM
IP: 85.207.18.–
V těch nejtěžších chvílích se otoč za sluncem a všechny stíny padnou za tebe. - John Lenon
Yohaku0
Návštěvník
23. 8. 2012   #4
-
0
-

Možná ještě předtím, než se změní hodnota času, zkontrolovat, jestli to není více jak 20 minut, a jestli ano, tak ho odhlásit... Ale to neřeší problém s vypnutím prohlížeče, nebo ano?

Nahlásit jako SPAM
IP: 85.207.18.–
V těch nejtěžších chvílích se otoč za sluncem a všechny stíny padnou za tebe. - John Lenon
z_moravec
~ Redaktor
+3
Posthunter
23. 8. 2012   #5
-
+1
-
Zajímavé

#4 Yohaku
Udělej si skript, který bude periodicky spouštěný cronem a ten bude procházet tabulku s uživateli a kontrolovat jestli čas od poslední akce není vyšší než zvolwený timeout. Pokud bude, tak uživatele odhlásí a je jedno, jestli jeho prohlížeč běží nebo ne. Pokud nemáš k dispozici crona, tak to budeš muset kontrolovat např. při volání jiného skriptu nebo funkce.

Nahlásit jako SPAM
IP: 147.251.29.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
CZechBoY+4
Věrný člen
23. 8. 2012   #6
-
0
-

#1 Yohaku
na nějakej sloupec přihlášen kašli, normálně tam dej datum poslední akce jak psal z_moravec a ten aktualizuj při každým načtení stránky...

při výpisu uživatelů prostě vybereš z databáze uživatele, který maj tuhle poslední akci mladší než 5minut třeba

Nahlásit jako SPAM
IP: 213.192.10.–
Yohaku0
Návštěvník
23. 8. 2012   #7
-
0
-

#5 z_moravec
A co je to cron?

Nahlásit jako SPAM
IP: 85.207.18.–
V těch nejtěžších chvílích se otoč za sluncem a všechny stíny padnou za tebe. - John Lenon
z_moravec
~ Redaktor
+3
Posthunter
23. 8. 2012   #8
-
+1
-
Zajímavé
Nahlásit jako SPAM
IP: 147.251.29.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
Yohaku0
Návštěvník
23. 8. 2012   #9
-
0
-

Cron k dispozici nemám, tak jsem to vyřešil takto:

Do tabulky do sloupce "lastaction" se vloží time() a v php:

<?php
$query=mysql_query(//dotaz do databáze);
$result=mysql_fetch_array($query);
$lastaction=$result['lastaction'];
if($lastaction //podmínka?? ){
session_destroy();
}
?>

Nevím, jak udělat tu podmínku...

Nahlásit jako SPAM
IP: 85.207.18.–
V těch nejtěžších chvílích se otoč za sluncem a všechny stíny padnou za tebe. - John Lenon
Řešení
z_moravec
~ Redaktor
+3
Posthunter
23. 8. 2012   #10
-
+1
-
Zajímavé
Vyřešeno Nejlepší odpověď

#9 Yohaku

if($lastaction < Time()-600 ){
session_destroy();
}

Pro timeout 10 minut.


Nahlásit jako SPAM
IP: 147.251.29.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
Yohaku0
Návštěvník
23. 8. 2012   #11
-
0
-

Děkuji! Ještě abych nemusel zakládat nové téma:

Když chci vypsat chybovou hlášku "Špatné jméno nebo heslo", píše to: 

Notice: Undefined variable: info in C:\xampp\htdocs\php2\interface.php on line 32
<?
session_start();
class Main {
  private $host='localhost';
  private $user='root';
  private $password='';
  private $database='yohaku';
  private function variables() {
    $info=array(
    'Server je nyní offline. Zřejmě probíhá údržba serveru.',
    'Špatné jméno nebo heslo.',
    'Byl(a) jsi přihlášen.'
    );
  }
  private function dbConfig(){
    $db=mysql_connect($this->host,$this->user,$this->password) or die ($info[0]);
    mysql_select_db($this->database, $db) or die (mysql_error($db));
    mysql_query('SET NAMES UTF8');
    mysql_query('SET COLLATION_CONNECTION=utf8_czech_ci');    
  }
  private function login() {
    if(isset($_POST['username'])) {
      if(isset($_POST['userpass']) && isset($_POST['username'])) {
        $userpass=mysql_real_escape_string(htmlspecialchars($_POST['userpass']));
        $username=mysql_real_escape_string(htmlspecialchars(strip_tags($_POST['username'])));
        $query001=mysql_query('select * from users where userpass="'.hash('sha1',$userpass).'" and username="'.$username.'"');
        $result001=mysql_fetch_array($query001);
        if(isset($query001['iduser'])) {
          $_SESSION['iduser']=$query001['iduser'];
          $this->msg=$info[2];
        } else {
          $this->msg=$info[1];
        }                
      } else {
        print "Musíš vyplnit všechny údaje.";
      }
    }
  }
  public function __construct() {
    $this->variables();
    $this->dbconfig();
    $this->login();
...

?>
Nahlásit jako SPAM
IP: 85.207.18.–
V těch nejtěžších chvílích se otoč za sluncem a všechny stíny padnou za tebe. - John Lenon
Yohaku0
Návštěvník
23. 8. 2012   #12
-
0
-

Tak už jsem na to přišel. :

Místo $this->msg=$info[1]; má být $this->msg=$this->info[1]; a funkci variables(), jsem smazal, a nasadil místo ní private proměnnou.

Ještě jsem měl chybu u if(isset($query001['iduser'])) { , tady mělo být if(isset($result001['iduser'])) {

Nahlásit jako SPAM
IP: 85.207.18.–
V těch nejtěžších chvílích se otoč za sluncem a všechny stíny padnou za tebe. - John Lenon
CZechBoY+4
Věrný člen
23. 8. 2012   #13
-
0
-

#12 Yohaku
hoď sem ještě jak si vyřešil ten výpis aktivních uživatelů...

nemusíš používat PHP funkci time, stačí funkce NOW v MySQL

Nahlásit jako SPAM
IP: 90.178.139.–
Yohaku0
Návštěvník
24. 8. 2012   #14
-
0
-

   

<h2>Online uživatelé</h2>
<?php
// dotaz byl výš, ale aby jste ho viděli, přesunu ho sem.
$query2=mysql_query('
SELECT * 
FROM  `users` 
WHERE  `lastaction` < NOW( ) -600
LIMIT 0 , 30
');
while($result2=mysql_fetch_array()) {
echo "<font color=\"".$result2['colorname']."\">".$result2['username']."</form><br />";
}
?>
Nahlásit jako SPAM
IP: 85.207.18.–
V těch nejtěžších chvílích se otoč za sluncem a všechny stíny padnou za tebe. - John Lenon
Lordest0
Super člen
24. 8. 2012   #15
-
0
-

timeout sa vzdy nehodi, v tom pripade sa este mozes pozriet na onbeforeunload (JS), ktory sa sice da obist, ale u velkej vacsiny pripadov to tak nebude a sem tam premazavat nejake vynimky.

Nahlásit jako SPAM
IP: 91.127.188.–
Yohaku0
Návštěvník
25. 8. 2012   #16
-
0
-

Jaký datový typ má být sloupec "lastaction"?

Nahlásit jako SPAM
IP: 85.207.18.–
V těch nejtěžších chvílích se otoč za sluncem a všechny stíny padnou za tebe. - John Lenon
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 13 hostů

Podobná vlákna

Vypršení Session — založil schimpanze

Sessions — založil tomj

Problém zo Sessions — založil jozo0025

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý