session_destroy(); на протребител

dakata__92

Super Moderator
Идеята ми е като банна потребител, аз като администратор да унищожа сесията на потребителя с ID = 10 примерно ! Възможно ли е ? Мога да му поставя session_destroy(); и да рефрешна, но искам да попитам аз като администратор мога ли да унищожавам дадена сесия ако пожелая ? Ако Да как ще стане ? :)
 
След като имаш променлива примерно $user ,която показва името на потребителя който искаш да баннеш,просто при банването направи сесия чрез него ,и след това в заявката веднага я унижтожаваш.

Погледни си логин-а и направи същото само че няма да вписваш данните му а просто сесията ще е с неговото име.

Ако просто искаш да го спреш да не влиза в сайта повече ще е достатъчно една заявка която да проверява дали е баннат или блокиране на ип
 
Въпроса е принципен ! Аз съм си направил система за блокиране на акаунта на абоната и тем подобни, но се цудех дали е възмождо да ДЕЛОГВАМ абонатите си като им унищожавам сесията ?
 
еми както по-горе споменах ако попринцип сесията на потребителя я записваш като неговото потребителско име е възможно .Виж пак коментара ми
 
Ето така я съсдавам

session_register("user");
$_SESSION['user'] = $user;
$_SESSION['id'] = $id;
session_register("pass");
 
До колкото знам сесиите се запазват на уеб сървъра, така че сигурно може да ги изтриеш. Аз не виждам смисъл да триеш сесия, като така или иначе можеш да го направиш ако потребителя е баннат.
 
carbonated каза:
До колкото знам сесиите се запазват на уеб сървъра, така че сигурно може да ги изтриеш. Аз не виждам смисъл да триеш сесия, като така или иначе можеш да го направиш ако потребителя е баннат.
Идеята ми е друга мога спокойно да си банна потребителя да му сложа destroy на сесията и става, но примерно ако поискам да го изхвърля моментно искам да мога да му унищожавам сесията или примерно има някой неща за които би ми било полезно да го имам това свойство :)
 
няма просто смисъл.Ако си имаш скрип ,който не му позволява да му зареждат страниците ако е баннат,какъв е смисъла да му триеш сесията?няма смисъл.Той като няма да има достъп до сайта,дори и да има сесия нищо не може да направи.
 
Въпроса не е само в бана искам на всеки потребител да мога да трия сесията по ред причини, които засягат сигорността на сайта ми ! Слагам си функции за контрол на абонатите, а това че мога да го банна не означава, че немога да имам по-лек вид наказание не е ли така ? Искам примерно да има един селект да вадя имената на потребителите и като видя кой е онлайн и искам да го изгоня моментно от сайта ще искам да му унистожа сесията ... Възможнж ли е или не ?



PHP:
$query = ("SELECT * FROM potrebiteli WHERE id='$id' "); 
		$result = mysql_query($query); 
		while($row = mysql_fetch_assoc($result))
		{
			$id = $row['id'];
			$user = $row['user'];
echo "$user - <a href='?delsesia=$id'>Del Sesia</a>"
		}
if(isSet($_GET['delsesia']))
{
//И тук е кода който примерно ще трие на дадения абонат сесията и ще го изхвърли МОМЕНТНО от сайта 
session_destroy(); 
}
 
Направи си едно допълнително поленце в базата примерно
"StopLogin" и тогава кода ще ти стане така:
if(isSet($_GET['delsesia']))

{

mysql_query("UPDATE users SET `stopLogin` = '".(time()+180)."' WHERE username = '$user'");

}

В червено са секундите 180 секунди са 3минути, т.е. моментния блок ще трае 3 минути, разбира се това можеш да си го направиш и индвидуално за всеки потребител от друго поле да вписваш секундите..
и ще си сложиш една проверка когато потребителя рефрешне страницата, ако НЕ Е празно полето"stopLogin" и времето, което е записано там е по-голямо от моментното да му маха сесията, с код става:
Код:
if($row['stopLogin'] >= time())

{
session_destroy();
// i refresh na stranicata
}

Същата проверка ще я правиш и ако се опита да си влезе в профила, а когато времето от stopLogin стане по-малко от моментното (демек му е изтекла времнната забрана) и той влезе в профила ще му ЗАНУЛИШ полето stopLogin и си готов.

Ако не искаш да му слагаш временен бан с дни,минути и секунди дори, може да му сложиш на полето само 1 и вече да правиш првоерка дали въпросното поле е 1, ако е 1 няма да влиза, ако е празно или 0 да влиза (по-лесния и прост вариант), и първия вариант, който ти казах е лесен стига да си разбрал идеята.

Ако нещо не ти е ясно питай, но така ще стане точно това, което ти искаш[/php]
 
Не прочетох всички отговори, но от няколкото прочетени видях че се изписаха много глупости.

Просто си направи при всяко зареждане на страницата като си логнат да ти се актуализира логина. Да кажем че в БДто с юзърите имаш поле баннед и то може да е или 0 или 1. Пре всеки рефреш като си логнат правиш query, което да проверява дали дадения потребител с даденото ИД е бадднес тоест 1. Ако е 1 му унищожаваш сесията.

Просто е нали.
 
Незнам аз ли лошо обеснявам или вие неможете да ме разберете ... Радко това което си го казал е точно така направено и при мен ! Въпроса ми е Мога ли когато пожелая да унищожа сесията на абонат или не ? Не искам да го блокирам а само да го делогна и като рефрешне си го пренасочвам към логина.

Логване на абоната - достъп до сайта - делогване от мен - нов лог от абоната ...
 
Сесиите се запазват по подобен начин (пише го в документацията)
/tmp/4/b/1/e/3/sess_4b1e384ad74619bd212e236e52a5a174If

така, че сам си прави извода дали си струва да запазваш имена и директории при създаването на сесия, че след това да ходиш да ги търсиш в системните директории и да ги триеш.

Не знам дали разбираш какво ти говорим, но да сложиш 1 допълнително поле в таблицата си както @MontefuckeR каза и потребителя "сам" да си махне сесията, ако в полето има нещо си е абсолютно същото като да се луташ и триеш файлове.
 
Много добре разбирам какво ми говорите ... Питам възможно ли е и какъв би бил кода ! За запазване на 0 и 1 -ци в поле и да подам на абоната сесия дестрой и при рефреш да я унищожи ок! Но нали трябва веднага след това да ъпдейтна отново на 0 цифрата 1 за да не е в постоянно делогване ! А ако в този момент абоната не рефрешне нищо не става защото цифрата ще е 0 пак и if-а няма да засече промяната на единицата защото рефрешва късно !

PHP:
$kod = 1;
if($kod == 1)
{
session_destroy(); 
$kod = 0;
$sql = (UPDATE tablica SET pole='$kod'  WHERE id='$id');
...
}
еlse if ($kod == 0)
{

//Drugiq kod
}
 
Значи натискаш бутона за ДЕЛОГВАНЕ и ъпдейтваш полето с 1, след това потребителя като рефрешне правиш проверка дали неговото поленце е равно на 1, ако е равно му слагаш UPDATE table SET pole =' 0' WHERE user='$user' и веднага след това Session_destroy(); , така ще занулиш полето и ще му убиеш сесията и той ще може веднага след това да си влезе в профила.
Отговора на въпроса ти е още в първото ми мнение, ако го обмислиш добре ще видиш, че е точно това, което ти трябва.
Няма как да го делогнеш или да му направиш каквото и да било без да рефрешне, всяка промяна ще му важи след като рефрешне, друг е въпроса, че можеш да правиш тази проверка дали е делогнат динамично посредством ajax на всяка секунда дори, така няма да се налага той да рефрешва, но този метод ще ти е нужен само ако прави нещо друго динамично, което не е нужно да рефрешва страницата.
 
Не мисля, че въобще му трябва session_destroy(). Ако запазва сесиите в базата данни, просто нека държи човека онлайн докато полето има стойност. Когато иска да го изгони, трие му сесията и готово.
За тази цел му предлагам да направи отделна таблица за сесиите на хората, като направи релации с главната таблица(users може би), за да се знае за кой потребител става въпрос.
Даже за по-голяма информация на потребителя, може да се направи така, че да се вижда в момента на коя страница е.
Също, е добре да се добави автоматизирано делогване на потребители, чрез cronjobs, като се направи скрипт, който трие от таблицата хората, които не са правили дейности през последните 10 минути например. Така се олекотява базата данни, макар че дори и 1000 записа да има, това няма да товари никак.
И освен автоматизирано делогване, администратора да си направи ръчно делогване(това, което иска автора) като в администрацията си направи страница, която изкарва сесиите на потребителите и насреща да има бутон "ИЗЛИЗАНЕ", например. След като натисне "ИЗЛИЗАНЕ" да трие сесията на потребителя от базата данни и при следващо действие на потребителя ще го изкара.
Разбира се, не трябва да се забравя проверката за сесия на потребителя, иначе файда няма от цялата работа.
А, както каза @MontefuckeR, ако иска автоматично да го изкара, без да прави отделно действие, то може да се направи скрипт чрез AJAX частично да през 10-15 секунди да прави проверка дали все още има сесия записана, и ако няма да го праща на началната страница.
 

Back
Горе