Autor Zpráva
Alastor_Kopal
Profil *
Nudný nepodstatný přiběh
Mám 3 stupně banu

1.stupeň - po 10 minutách přihlášení
2.stupeň - jen v některé hodiny
3.stupeň - nepřihlášení

3.stupeň uživatele nepustí, 2.stupeň si zjistím hodinu [i]$hod=date("H");
ale 1.stupeň s ním si nevím rady [/i]

Otázka na Vás

jak mám po deseti minutách strávených na stránce změnit session ?
Nox
Profil
No...v databázi si uložíš čas přihlášení a na každé stránce porovnáš, jestli to už bylo 10 minut a pokud jo, tak provedeš co chceš...třeba zrušíš session a přesměruješ ho na přihlašovací obrazovku, celkem jednoduché

Koukám, že se nevzdáváš;)
Alastor_Kopal
Profil *
Koukám, že se nevzdáváš;)
???

Hmm nešlo by to zapsat jen do session ? Třeba zhruba asi nějak tak

prihlaseni.php
$ban == 1{header("location: ban1.php"); }


ban1.php
$start = date(time);
$_session["cil"] = $start + 10

if($start == $_session["cil"]) 
{echo"jseš volný";
$_session["ban"] = 0}

else{echo"ještě si počkej";}


Moderátor Alphard: Kombinace tří m za sebou tady přivolá moderátora, nepoužívej ji prosím zbytečně.
Nox
Profil
Možná http://cz.php.net/manual/en/function.session-set-cookie-params.php
Alastor_Kopal
Profil *
Tomu moc nerozumím na svém příkladu bych to měl asi takhle ? S cookies jsem nikdy nepracoval a ani nemám jeho základy

ban1.php

$lifetime = 15
$path = ban1.php
$domain = www.domena.neco.cz


void session_set_cookie_params  ( int $lifetime  [, string $path  [, string $domain  [, bool $secure= false  [, bool $httponly= false  ]]]] )


jinak nějak tomu moc nerozumím ale hádám že trohle fungovat nebude
Nox
Profil
Alastor_Kopal
1. chybí ti středníky
2. chybí ti uvozovky kolem řetězců (už jsme ti říkali)
3. tenhle tvar je jen nápověda v manuálu, žádný návratový typ, datové typy ani závorky v argumentech samozřejmě nejsou

S cookies jsem nikdy nepracoval a ani nemám jeho základy
Tak si o nich přečti ;)

Mělo by to být teda něco jako

$lifetime = 600; // 10*60 vteřin
session_set_cookie_params($lifetime);


Ale přečti si taky tento komentář: http://cz2.php.net/manual/en/function.session-set-cookie-params.php#77726
Alastor_Kopal
Profil *
$lifetime = 600; // 10*60 vteřin
session_set_cookie_params($lifetime);


tohle jé kód který udává počet sekund ne ? Ale poté co s tím ? tam neudělám podmínky if else ?
AM_
Profil
Tohle řešit přes timeout PHPSESSID cookie je asi jako s jadernou bombou na komára. Ne dělem, ale jadernou bombou, protože těch škod okolo.. :)
Normálně si do $_SESSION['start_time'] ulož aktuální time() a pak kontroluj
if ($_SESSION['start_time'] <= time()+600)
{
  echo "o 10 minut pozdeji...";
}
Alastor_Kopal
Profil *
Takže to co jsem psal prvně bylo skoro správně takže asi nějak tak že ?

<?php
session_start(); // Startujeme session
$_session[start_time] = time();
if ($_SESSION['start_time'] <= time()+600)
{
  echo "o 10 minut pozdeji...";
}else{
echo" ještě si počkej";}
?>
AM_
Profil
$_session[start_time] = time();
ty tam používáš konstantu start_time? kde ji definuješ?
Alastor_Kopal
Profil *
Tak když máš v if start_time tak jsem čas uložil do start_time
AM_
Profil
ale nikde nemáš DEFINE('start_time', 'start_time');
Alastor_Kopal
Profil *
aha takže

<?php
session_start(); // Startujeme session
DEFINE('start_time', 'start_time');
$_session[start_time] = time();
if ($_SESSION['start_time'] <= time()+600)
{
  echo "o 10 minut pozdeji...";
$_session[ban] = 0;
}else{
echo" ještě si počkej";}
?>
AM_
Profil
ne. $_SESSION['start_time'] = time(); bude lepší, než zavádět konstantu.
Alastor_Kopal
Profil *
šak session = time tam mám
Alastor_Kopal
Profil *
dal jsem to na web a dala se mi tam hláška - o 10 minut později
s DEFINE('start_time', 'start_time'); i bez DEFINE('start_time', 'start_time');
AM_
Profil
Vysvětlím:
start_time je identifikátor programové konstanty definované pomocí DEFINE - může mít libovolnou hodnotu; něco podobného jako proměnná $start_time
'start_time' je řetězcová hodnota, která je klíčem pole session.
čili:
$_SESSION['start_time'] je to, co chceš, na to žádné DEFINE nepotřebuješ
tebou použíté $_SESSION[start_time] je chyba, jen díky své inteligenci PHP skript pochopí tak, jak to nepozorný programátor myslel: přiřadí stejnou hodnotu, jako je název konstanty, tedy start_time, je ovšem generována chybová zpráva, že konstanta start_time není definována. Jedním slovem funguje to, ale je to čuňárna.
Alastor_Kopal
Profil *
ty si protiřečíš ikdyž vím že teď co říkáš je správné protože jsi psal

AM_

ale nikde nemáš DEFINE('start_time', 'start_time');

Takž jak změnit jméno session ?

<?php
session_start(); // Startujeme session
$_session['cas] = time();
if ($_SESSION['cas'] <= time()+600)
{
  echo "o 10 minut pozdeji...";
$_session[ban] = 0;
}else{
echo" ještě si počkej";}
?>
Alastor_Kopal
Profil *
<?php
session_start(); // Startujeme session
$_session['cas'] = time();
if ($_SESSION['cas'] <= time()+600)
{
echo "o 10 minut pozdeji...";
$_session[ban] = 0;
}else{
echo" ještě si počkej";}
?>
AM_
Profil
$_session[ban]
další konstanta ban? :-D

ty si protiřečíš ikdyž vím že teď co říkáš je správné protože jsi psal
kde si protiřečím?

Takž jak změnit jméno session ?
Proč to chceš dělat? jméno session mění funkce session_name, ale to zřejmě není to, co chceš.
Alastor_Kopal
Profil
$1 = DEFINE('start_time', 'start_time');

další konstanta ban? :-D
Vžyď jsem psal po 10 minutách změna session

kde si protiřečím?
ve [#12] píšeš kde mám $1 a ve [#17] píšeš že dávat tam $1 je prasečinka

Proč to chceš dělat? jméno session mění funkce session_name, ale to zřejmě není to, co chceš.
tak databázi jsem už zatížili 20 přízpěvky nezkoncujeme s tím ? Já se snažím ale pořád nám do toho vlítají nový věci teď nevim jak se mám ubírat dál
AM_
Profil
„další konstanta ban? :-D “
Vžyď jsem psal po 10 minutách změna session


ve [#12] píšeš kde mám $1 a ve [#17] píšeš že dávat tam $1 je prasečinka
pokud chceš používat konstantu start_time, ban atd, musíš tam mít DEFINE. Je ale lepší to psát rovnou jako řetězcové hodnoty, tj 'start_time', 'ban'

tak databázi jsem už zatížili 20 přízpěvky nezkoncujeme s tím ? Já se snažím ale pořád nám do toho vlítají nový věci teď nevim jak se mám ubírat dál
Řeknu to co vždy - snažíš se špatným věcem - kompletuješ věci, kterým nerozumíš. Já vážně nevím, co myslíš tím "změnit jméno session" (což může sloužit k tomu, že různé skripty pod stejnou doménou budou mít různé session).
Alastor_Kopal
Profil
hmm já vážně nevííím

<?php
session_start(); // Startujeme session
DEFINE('start_time', 'ban');
$_session[start_time] = time();
if ($_SESSION['start_time'] <= time()+600)
{
  echo "o 10 minut pozdeji...";
$_session[ban] = 0;
}else{
echo" ještě si počkej";}
?>


???????
AM_
Profil
Tak to už ani nebude fungovat.
chápeš, že start_time je konstanta, kterou nepotřebuješ, a 'start_time' je řetězec?
$_SESSION['start_time'] - správně, to je to, co chceš
$_SESSION[start_time] - nesmyslné použití nedefinované konstanty, něco jako kdybys napsal $_SESSION[$start_time] - chování konstant a proměnných je docela podobné, rozdíl je že konstanty mají hodnotu trvalého charakteru

Můžeš mi z vlastní iniciativy vysvětlit, proč někdy ty uvozovky kolem start_time píšeš a někdy ne?
Alastor_Kopal
Profil
Tak počkej hmm [#19] nebylo správně ?
AM_
Profil
ne, nebylo, $_SESSION[ban] má být $_SESSION['ban'] - to je jediná chyba, kterou jsem ti tam vytknul, stačí si přečíst [#20]
Alastor_Kopal
Profil
Takž jenom ty úvozovky ?

<?php
session_start(); // Startujeme session
$_session['cas'] = time();
if ($_SESSION['cas'] <= time()+600)
{
echo "o 10 minut pozdeji...";
$_session['ban'] = 0;
}else{
echo" ještě si počkej";}
?>
AM_
Profil
před $_SESSION['cas'] = time(); by mělo být if (!isset($_SESSION['cas'])) , aby se to nepřepisovalo pokaždé, ale jen při prvním vstupu
Alastor_Kopal
Profil
Pořád dal jsem to na server a dala se mi tam hláška o deset minut později takže
Tohle vypadá jako divná syntaxe
<?php
session_start(); // Startujeme session
if (!isset($_SESSION['cas'] = time())){}
elseif ($_SESSION['cas'] <= time()+600)
{
echo "o 10 minut pozdeji...";
$_session['ban'] = 0;
}else{
echo" ještě si počkej";}
?>
AM_
Profil
Ježíš, to je fakt divný. Takže nezvládáš ani základní syntaxe?
<?php
session_start(); // Startujeme session
if (!isset($_SESSION['cas'])){ 
  $_SESSION['cas'] = time(); 
}
elseif ($_SESSION['cas'] <= time()+600)
{
  echo "o 10 minut pozdeji...";
  // $_session['ban'] = 0; - pokud to nepoužíváš nikde jinde, je to zbytečné
}else{
  echo" ještě si počkej";
}
?>

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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