Как се прави да изтича сесията след време.

sentenello

Registered
Здравейте.
Гледам, че в последно време се изписа доста по въпроса със сесиите, но никъде не можах да открия как да си направя това което питам в заглавието.

Значи, потребителя е логнат и затваря сайта директно от "Х", но остава логнат, и ако е на някоя зала :).
Как се прави да кажем след 10 минути сесията сама да пада. Има и друг проблем според мене и той е. Да се маха сесията 10 минути след като потребителя не е активен.
Благодаря.
 
Код:
<?
setcookie('login', '1', time() + 600);
?>

променяш login с името на сесията .. това 600 за 10 минути .. тоест 600 секунди
 
Да .. след като направиш проверката за ваведени правилно данни тоест име и парола.. ако те са вярни слагаш този код, който създава сесия с име login, която ще изтече след 10 минути :)
 
sentenello каза:
Това те лог-аутва ако не си правил нищо 10 минути нали така ?
Стига лъга човека - това сетва куки за 10 минути. Тоест логва се и след 10 минути е логаутнат без значение дали е правил нещо или не. ;) Пробвай по този начин - слагаш във всички страници код, който да ъпдейтва дб-то със сегашното време (колко е часа). След това си извеждаш нали SELECT.... и правиш променлива да кажем $chas която се състои от последния update на дб-то с часа и прибавените към него 10 минути. И после правиш проверка ако сегашния час е по-голям от часа в базата данни (вече събран с 10-те минути) и ако да -> session_destroy(); ;) Дано си ме разбрал ако не да обяснявам по-подробно.
 
Да лъжа го .. просто несам се изразил достатачно правилно .. какав е смисала на всичко това ? може просто с проверка дали има бисквитки да стане всичко ето как :

Код:
<?
if (!isset($_COOKIE['login']))
{
session_destroy();
}
?>

Този код проверява дали все още има сесия login тоест ако неса истекли 10-те минути на сесията тя все още ще съществува.. но ако са изтекли унищожаваме сесията и вече си излязал от акаунта ..
 
Еми да... Какво ще рови в бази данни и незнам си какво.
Сетва си сесията и като рефрешне проверява дали е истекла сесията.
Ако не е - я подновява, ако е истекла му дава логин формата.

Я си представи че 3000-4000 човека са в сайта. Ми ти си натоварваш излишно SQL сървъра за тоя дето д*ха...
 
В момента се чудя кое да използвам... дали това на justspy
Код:
	 <?
if (!isset($_COOKIE['login']))
{
session_destroy();
}
?>
или това което е дал @MontefuckeR
 
Значи това което първоначално ти дадоха няма да ти свърши работа.
Или поне не е това което искаш.

Принципа на първия код е:

Сетва се 10 минутна сесия, и след това при рефреш проверява дали е истекла сесията. И като истече сесията край - логаутва те, независимо че си рефрешнал на 9:59 ;)

Втория код е нерационален, защото ползва БД( да ме извини колегата - това си е мое лично мнение)

А това което ти трябва е първия код + по-различна проверка за истичането на сесията. Ще ти го обесня принципно и ще оставя практическата част на теб ;)

1. Сетваш сесия при логин.
2. Вече логоннат, задаваш проверка(прост if):

В нея да има проверка дали е истекла сесията, ако е - логаут
Ако не е истекла сетваш сесията наново със същия код и име на сесията ;)

Това е, няма нищо кой знае колко сложно в цялата логика.
Ако неможе да го напишеш под формата на код, това е др. въпрос ;)
 
@justspy +1
Още не съм пробвал дали става и дали работи както аз искам, но ти ми се струваш най-зайнтересован да ми помогнеш и затова на тебе давам точката.
 
Нека и аз малко се включа в темата :)

Така както каза @MontefuckeR, има си начин да се определи колко време да бъде активна дадена сесия. По принцип доколкото си спомням това можеше да се нагласи от конфигурационния файл на Apache или php.ini не помня точно от къде :)

Ето един алтернативен начин за прекратяване на сесията :)

Така в началтото на всеки файл, който ползва сесии се поствавя следния код:
(кода се поставя след session_start();)

Код:
<?php
// тук трябва да има session_start();
$session_unset = array('login'); // тук се вписват кои сесии да бъдат затворени след изтичане на времето.
$tme_active = 10; // колко минути да бъде активна сесията. Ако страницата не се презареди преди тези минути да минат, сесиите които са записани в горния масив ще бъдат унищожени.

if (!isset($_SESSION['session_unset_time'])) $_SESSION['session_unset_time'] = (time() + ($tme_active * 60));

if (time() >= $_SESSION['session_unset_time'])
	foreach($session_unset as $sess) unset($_SESSION[$sess]);

$_SESSION['session_unset_time'] = (time() + ($tme_active * 60));

// от тук надолу продължава твоя код
?>
 

Back
Горе