Autor | Zpráva | ||
---|---|---|---|
rkomoras Profil |
#1 · Zasláno: 24. 10. 2009, 15:30:22
Zdravím, mám problém s platností session při vkládání článků. Když píšu článek, a potvrdím formulář, občas se stane, že vyprší session, já se ocitnu na přihlašovací stránce a všechen text je ztracen. Napadlo mě zrušit ověřování session v souboru se SQL příkazy, session se stejně ověřuje na každé stránce:
session_start(); if(!isset($_SESSION["admin"]) || $_SESSION["admin"]==0) header("Location: index.php"); Je to bezpečné? |
||
WertriK Profil |
#2 · Zasláno: 24. 10. 2009, 15:38:18
rkomoras:
Nebo místo použití session si vytvoř cookie a kontroluj zda existuje, při odhlášení ji jen zničíš. |
||
rkomoras Profil |
#3 · Zasláno: 24. 10. 2009, 15:41:35 · Upravil/a: rkomoras
Já to mám přes session, protože jsou prý nejbezpenější.
EDIT: teď jsem si všiml, že se ten článek přidal... |
||
GeneralDv Profil |
#4 · Zasláno: 24. 10. 2009, 17:40:27
rkomoras:
„Já to mám přes session, protože jsou prý nejbezpenější.“ Já to mám taky přes sessions i přes cookie, ale kontroluje se to podle údajů v DB. |
||
AM_ Profil |
#5 · Zasláno: 24. 10. 2009, 18:30:27
je hloupost dělat nějaké koniny jako rušit session na některých stránkách. Raději to vyřeš centrálně, a to následovně:
- pokud se odešlou nějaká POST data a vyprší session, tak je přihlašovací stránka "nezahodí", ale znovu je pomocí skrytých inputů předá dál; přičemž po opětovném přihlášení to uživatele vrátí tam, kde byl předtím, nevyhodí ho to na úvod. |
||
rkomoras Profil |
#6 · Zasláno: 24. 10. 2009, 18:38:54 · Upravil/a: rkomoras
Asi to tak udělám...pořád jsem si myslel že tohle:
session_start(); require_once("../includes/connection.php"); if(!isset($_SESSION["admin"]) || $_SESSION["admin"]==0) header("Location: index.php"); $nazev = $_POST["nazev"]; $kategorie = $_POST["kategorie"]; $content1 = $_POST["content1"]; $content2 = $_POST["content2"]; $datumacas = date("j.n.Y G:i"); $sql = "INSERT INTO clanky (titulek, datum, uvod, obsah, kategorie) VALUES ('$nazev', '$datumacas', '$content1', '$content2', $kategorie);"; $query = mysql_query($sql) or die ("Někde se stala chyba: " . mysql_error()); header("Location: clanky.php?added"); mě přesune na index.php a neuloží výsledky do databáze.... |
||
AM_ Profil |
#7 · Zasláno: 24. 10. 2009, 19:49:15
tak tohle je zabezpečení na nic, to ti na tom webu udělám cokoliv, aniž bych znal heslo :) stačí jen vědět ,jaká data na kterou stránku zaslat.
Správně je: if(!isset($_SESSION["admin"]) || $_SESSION["admin"]==0) { header("Location: index.php"); die(); } |
||
rkomoras Profil |
#8 · Zasláno: 24. 10. 2009, 19:53:59
Jenže pak bych musel vytvářet hidden inputy pro každé pole v administraci v index.php, ne? Nebo to mám dát do GET?
|
||
Alphard Profil |
#9 · Zasláno: 24. 10. 2009, 22:34:23
[#8]
$_POST je normální pole, hidden pole můžete vytvořit ve foreach(). Nebo si je někam uložte a přenášejte jenom identifikátor. Třetí možnost bych viděl v tom, že zápis do databáze musí být stejně zabezpečený, takže to můžete hodit rovnou do tabulky a jen k tomu přidat příznak, že to není chválené. Pak by to ale chtělo nějakého správce, který jednou za čas smaže smetí. |
||
rkomoras Profil |
#10 · Zasláno: 24. 10. 2009, 22:37:45
[#9] Alphard
Teď jsem to nepochopil...radši si zkusím prodloužit session. |
||
Časová prodleva: 15 let
|
0