PDA

View Full Version : سوال: تعداد کاربران online



نهمنهح
پنج شنبه 12 دی 1387, 09:43 صبح
سلام
میخوا بدونم چطور میشه وضعیت کاربر را وقتی که مرورگر را میبندد از حالت on به off تبدیل کرد(در db)؟
با تشکر

maysamscript
پنج شنبه 12 دی 1387, 11:43 صبح
این کار روش خوبی برای به دست آوردن تعداد افراد آنلاین نیست چون ممکنه اصلاً کاربر مرورگر را نبنده و اینترنت را قطع کنه اینجوری همیشه آنلاین به نظر میرسه

narsic
پنج شنبه 12 دی 1387, 14:57 عصر
بهتر زمان بزاری یعنی بعد از یه زمان خاص کاربر رو از بانک حذف کنی این بهترین راهه .
قبلا در موردش بحث شده یه جستجو کنی بد نیست

rasoolgh1
دوشنبه 23 دی 1387, 19:34 عصر
با سلام
شما میتونید از session_id بروزر تون استفاده کنید
:چشمک:

terrorhell
دوشنبه 23 دی 1387, 22:16 عصر
mysql_connect(localhost, username, password) or die();
mysql_select_db("mysql_database") or die();

$datume= date("U");
$datumex=$datume-600;

$tojvip=$_SERVER["REMOTE_ADDR"];

$query1 = "DELETE FROM online where ip='$tojvip'";
$result1 = mysql_query($query1) or die();

$query2 = "DELETE FROM online where datum<$datumex";
$result2 = mysql_query($query2) or die();


$query = "INSERT into online VALUES (''$tojvip',$datume')";
$result = mysql_query($query) or die();

$resultkolk = mysql_query("SELECT * FROM online");
$num_rowskolk = mysql_num_rows($resultkolk);


echo "اعضاء آنلاين: $num_rowskolk"

rasoolgh1
چهارشنبه 25 دی 1387, 01:35 صبح
سلام ای بابا شما که همش query زدی تو data base چرا از از متغیر های GLOBAL یا Session
استفاره نمی کنید .

narsic
پنج شنبه 26 دی 1387, 10:16 صبح
چون متغیرهای سراسری در همه سرورها پشتیبانی نمیشه و استفاده نکردن ازشون پیشنهاد شده .
تا بانک مونده چرا از چیز دیگه ایی استفاده کنیم .
موفق باشید

$ M 3 H R D A D $
جمعه 20 اسفند 1389, 13:11 عصر
من یک روش و میگم کسی اگه توی این روش اشکالی کیبینه بهم بگه لطفا

ما برای هر بازدید از صفحه 2 تا سشن و فعال میکنیم
سشن کاربر و سشن آنلاین
سشن کاربر که از قبل وجود داره یعنی بعد از لوگین
اگه بازدید کننده لوگین کرده بود این سشن 1 می شود اگه نه صفر
و سشن آنلاین هم به مدت 1 مین برای مهمان و 30 مین برای کاربر شارژ میشه
یعنی کاری مداریم که کی اومده کی داره میره
هر وقت بازدید کرد این سشن ها تمدید میشن
بدون استفاده از بانک
و در نهایت تعداد سشن های سایت و میشمریم و نمایش میدیم
بدون استفاده از بانک
کسی نظری داره ؟

$ M 3 H R D A D $
جمعه 20 اسفند 1389, 13:12 عصر
در واقع اینم بگم سشن همون کوکی هست که سرور اونو میسازه و مدیریت میکنه و ما به طور جدا سشن نداریم!! و از خاصیت های کوکی پیشرفته و میشه گفت سشن

hamedfarahabady
جمعه 20 اسفند 1389, 15:45 عصر
ما با چه تابعی تعداد کوکی های ایجاد شده را بشماریم؟

$ M 3 H R D A D $
جمعه 20 اسفند 1389, 17:11 عصر
<?php
session_start();

function getUsersOnline() {
$count = 0;

$handle = opendir(session_save_path());
if ($handle == false) return -1;

while (($file = readdir($handle)) != false) {
if (ereg("^sess", $file)) $count++;
}
closedir($handle);

return $count;
}

$usercount = getUsersOnline();
echo $usercount;
?>

amir001
جمعه 20 اسفند 1389, 17:48 عصر
<?php
session_start();

function getUsersOnline() {
$count = 0;

$handle = opendir(session_save_path());
if ($handle == false) return -1;

while (($file = readdir($handle)) != false) {
if (ereg("^sess", $file)) $count++;
}
closedir($handle);

return $count;
}

$usercount = getUsersOnline();
echo $usercount;
?>


اینجوری که نمیشه.
اگر سشن ها توی /tmp ذخیره شده باشن ، سشن های تمامی سایتهای روی سرور را میگیری و برای خودت جساب میکنی.
آخه تنها سشن های سایت شما نیست که ذخیره شده
تمام سایت های روی سرور سشن دارند.

amir001
جمعه 20 اسفند 1389, 18:00 عصر
اگر از بانک اطلاعاتی استفاده کنید بهتره.
توی یک جدول آی پی افراد را ذخیره میکنی ، هر بار که میخواهی تعداد آنلاین ها را بگیری اول رکوردهایی که از یک زمانی عقبتر هستند را حذف میکنی (مثلا 5 دقیقه) بعد تعداد باقی مانده ها را میشماری.

از روش هایی که یک سوکت پایدار به سرور ایجاد میکنند هم میشه استفاده کرد.
من خودم تست نکردم اما شاید از سوکت های فلش و یا از Comet بتونید استفاده کنید.
فکر کنم چند باری در موردشون بحص شده باشه.

رضا قربانی
دوشنبه 23 اسفند 1389, 10:28 صبح
در اکثر برنامه های جامع شمارش بازدیدکننده، قابلیت نمایش افرادی که آنلاین هستند تعبیه شده. ما در اینجا قصد نداریم اسکریپتی را معرفی کنیم که بلافاصله پس از دریافت، آن را به سرویس دهنده خود منتقل و از آن استفاده کنید. جنبه ی آموزشی ساختار این اسکریپت و نحوه کارش برایمان مهم است. (سطح مقاله: مبتدی و کمی بالاتر از آن) به راحتی می توان اطلاعات مربوط به این اسکریپت را در یک فایل متنی ذخیره نمود اما برای انعطفاف پذیری و قدرت مانور بیشتر از بانک اطلاعاتی MySQL استفاده می کنیم. در ابتدای کار برای ساخت این جدول کدهای SQL زیر را در بانک اطلاعاتی خود وارد کنید:



CREATE TABLE online_count (
ip char(15) NOT NULL,
TMP timestamp(14),
PRIMARY KEY (ip)
);


واضح است که این کدها یک جدول به نام online_count با دو فیلد، یکی برای زمان و دیگری برای آدرس ip ایجاد می کند. بخش اصلی این اسکریپت به شکل زیر است:


<?php
$Host = "localhost"; //Host name
$User = "root"; // Username
$Mdp = "alvan"; // Password
$Base = "test"; // Database Name

mysql_connect ( $Host , $User , $Mdp );

//Timeout in seconds
$TimeOut = 60;

$ip = getenv( "REMOTE_ADDR" );

$Requete = "DELETE FROM online_count WHERE TMP < now()";
$Resultat = mysql_db_query( $Base , $Requete );
$Requete = "SELECT count(*) FROM online_count WHERE ip='$ip'";
$Resultat = mysql_db_query( $Base , $Requete );

while ( $T = @mysql_fetch_array( $Resultat ) ) {
$Compteur = $T["count(*)"];
}

if ( $Compteur ) {
$Requete = "UPDATE online_count SET TMP=TMP + $TimeOut WHERE ip='$ip'";
} else {
$Requete = "INSERT INTO online_count (ip, TMP) VALUES ('$ip', now()+ $TimeOut)";
}

$Envoi = mysql_db_query( $Base , $Requete );

$Requete = "SELECT count(*) FROM online_count";
$Envoi = mysql_db_query( $Base , $Requete );

while ( $T = @mysql_fetch_array( $Envoi ) ) {
$Compteur = $T["count(*)"];
}

echo $Compteur;
?>

خط 2 تا 5 پارامترهای اتصال به پایگاه داده است که باید مقدار دهی شوند (توضیحات جلوی پارامترها مشخص می کند هر کدام مربوط به چه هستند) روش کار این اسکریپت به این شرح است که ابتدا آدرس IP ماشین در متغیر ip ذخیره می شود(12) چنانچه زمان رکورد شده در فیلد زمان، کمتر از زمان کنونی باشد، مشخصه آن آدرس پاک خواهد شد(14-15) بنابراین نگران افزایش حجم جدول نباشید.
البته توجه داشته باشید که زمان رکورد شده در فیلد، زمان کنونی بعلاوه پیش فرض 60 ثانیه خواهد بود که بعنوان Timeout انتخاب شده و مقدار آن قابل تنظیم است. حال یک ساختار شرطی ایجاد می کنیم، چنانچه ip مربوط به همان ماشین قبلی بود رکوردهای ضبط شده را آپدیت می کنیم در غیر اینصورت یک مشخصه جدید در جدول ایجاد خواهد شد(23-27) در انتهای کار با شمردن تعداد ردیف های جدول با استفاده از حلقه While، تعداد کاربران آنلاین در آن زمان را نمایش می دهیم. علاوه بر این خودتان می توانید براحتی بخش هایی مضاف بر این، بدان اضافه کنید.



امیدوارم که بدردتون بخوره


موفق باشید
Alvanweb (http://alvanweb.com/)

.fatemeh
دوشنبه 03 مرداد 1390, 10:12 صبح
<font xmlns="http://www.w3.org/1999/xhtml"><font xmlns="http://www.w3.org/1999/xhtml">
mysql_connect(localhost, username, password) or die();
mysql_select_db("mysql_database") or die();

$datume= date("U");
$datumex=$datume-600;

$tojvip=$_SERVER["REMOTE_ADDR"];

$query1 = "DELETE FROM <span class="highlight">online</span> where ip='$tojvip'";
$result1 = mysql_query($query1) or die();

$query2 = "DELETE FROM <span class="highlight">online</span> where datum<$datumex";
$result2 = mysql_query($query2) or die();


$query = "INSERT into <span class="highlight">online</span> VALUES (''$tojvip',$datume')";
$result = mysql_query($query) or die();

$resultkolk = mysql_query("SELECT * FROM <span class="highlight">online</span>");
$num_rowskolk = mysql_num_rows($resultkolk);


echo "اعضاء آنلاين: $num_rowskolk"
</font></font>


من از این کد استفاده کردم
ولی چرا چیزی داخل بانکم درج نمی شه؟؟
مشکلم از کجا می تونه باشه؟

MMSHFE
دوشنبه 03 مرداد 1390, 11:44 صبح
با سلام، اگه با اين كلاسي كه نوشتم و ضميمه كردم، Sessionهاي خودمون رو توي DB ذخيره كنيم، ميتونيم تعدادشون رو شمرده و از روشي كه دوستم آقاي $ M 3 H R D A D $ (http://barnamenevis.org/member.php?131829-M-3-H-R-D-A-D) گفتن استفاده كنيم و تعداد Sessionهاي سايت خودمون رو بشمريم. البته نه با استفاده از پوشه session_save_path بلكه با استفاده از تعداد سطرهاي موجود در جدول Sessionها يعني با كمك تابع mysql_num_rows و...
موفق باشيد.

رضا قربانی
سه شنبه 04 مرداد 1390, 00:21 صبح
این که ارور می ده

تستش کنید

MMSHFE
سه شنبه 04 مرداد 1390, 07:23 صبح
همين الآن تستش كردم و كار ميكنه. چه خطايي ميده؟ ديتابيس رو همونطور كه گفته شده ساختين؟ فايل SQL رو توي phpMyAdmin وارد (Import) كنيد. موقع ساخت شئ هم اطلاعات سرور MySQL خودتون رو (شامل نام سرور، نام كاربري، رمز عبور، نام ديتابيس) براش بفرستين. بعد از اون كافيه اين فايل رو در هر فايلي كه ميخواد با Session كار كنه، ضميمه كنيد و يك شئ از كلاس بسازيد و از اون به بعد، مثل قبلاً از Session استفاده كنيد. اين كلاس بطور خودكار مديريتش رو بعهده ميگيره.
موفق باشيد.

رضا قربانی
سه شنبه 04 مرداد 1390, 09:49 صبح
همين الآن تستش كردم و كار ميكنه. چه خطايي ميده؟ ديتابيس رو همونطور كه گفته شده ساختين؟ فايل SQL رو توي phpMyAdmin وارد (Import) كنيد. موقع ساخت شئ هم اطلاعات سرور MySQL خودتون رو (شامل نام سرور، نام كاربري، رمز عبور، نام ديتابيس) براش بفرستين. بعد از اون كافيه اين فايل رو در هر فايلي كه ميخواد با Session كار كنه، ضميمه كنيد و يك شئ از كلاس بسازيد و از اون به بعد، مثل قبلاً از Session استفاده كنيد. اين كلاس بطور خودكار مديريتش رو بعهده ميگيره.
موفق باشيد.


چند تا سوال .

این که با هر رفرش توی بانک سیشن ها رو ذخیره می کنه !! جریانش چیه ؟ آیا هر 60 ثانیه اطلاعات سیشن رو از بانک پاک می کنه یا اصلا پاک می کنه ؟ ما چیزی ندیدیم .

سیشن استارت رو خطا می گیره :


Warning: session_start() [function.session-start (http://localhost/sssh/sssh/function.session-start)]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\sssh\sssh\index.php:8) in C:\xampp\htdocs\sssh\sssh\index.php on line 15
http://www.ncis.ir


بعدش شما می گید کد افراد آنلاین آقا مهرداد که با سیشن ها هستند رو در ایندکس شما اضافه کنیم ؟؟؟

MMSHFE
سه شنبه 04 مرداد 1390, 13:23 عصر
دوست گرامي، شما به اين خطا بر بخوريد ديگه زياد جالب نيست! فايل رو با UTF-8 without BOM ذخيره كنيد. ضمناً با هر بار Refresh اطلاعات دوباره ذخيره نميشه بلكه Update ميشه چون طوري تنظيم شده كه درصورت عدم فعاليت به مدت 20 دقيقه، Session از بين بره. بنابراين با هربار مشاهده يك صفحه، آخرين زمان بازديد اصلاح ميشه. موفق باشيد.

رضا قربانی
چهارشنبه 05 مرداد 1390, 10:14 صبح
دوست گرامي، شما به اين خطا بر بخوريد ديگه زياد جالب نيست! فايل رو با UTF-8 without BOM ذخيره كنيد. ضمناً با هر بار Refresh اطلاعات دوباره ذخيره نميشه بلكه Update ميشه چون طوري تنظيم شده كه درصورت عدم فعاليت به مدت 20 دقيقه، Session از بين بره. بنابراين با هربار مشاهده يك صفحه، آخرين زمان بازديد اصلاح ميشه. موفق باشيد.
فایل رو باید با چه نرم افزاری به UTF-8 without BOM تبدیل کنم ؟
پس تعداد بازدید آنلاین رو تا سقف 20 دقیقه می زنه . این 20 دقیقه اگر کسی در سایت حضور نداشته باشه خودش رکورد رو پاک می کنه یا نه حتما باید کسی در سایت حضور داشت ؟

Dead Space
چهارشنبه 05 مرداد 1390, 11:43 صبح
فایل رو باید با چه نرم افزاری به UTF-8 without BOM تبدیل کنم ؟
سلام
با NotePad ++ می تونی UTF-8 without BOM کنی
جناب شهرکی یه سوال در مورد کلاستون داشتم من این خط رو متوجه نمیشم داره چیکار می کنه یه توضیح میدید:

session_set_save_handler(array(&$this,'Open'),array(&$this,'Close'),array(&$this,'Read'),array(&$this,'Write'),array(&$this,'Destroy'),array(&$this,'GC'));

MMSHFE
چهارشنبه 05 مرداد 1390, 13:02 عصر
سلام
با NotePad ++ می تونی UTF-8 without BOM کنی
یه سوال در مورد کلاستون داشتم من این خط رو متوجه نمیشم داره چیکار می کنه یه توضیح میدید:
session_set_save_hanlder...

اين خط از كد، توسط تابع session_set_save_handler متدهاي كلاس رو براي بازكردن، بستن، خواندن، نوشتن، از بين بردن و حذف كردن ضايعات (Sessionهاي منقضي شده) معرفي ميكنه.

پس تعداد بازدید آنلاین رو تا سقف 20 دقیقه می زنه . این 20 دقیقه اگر کسی در سایت حضور نداشته باشه خودش رکورد رو پاک می کنه یا نه حتما باید کسی در سایت حضور داشت ؟
نياز به حضور كسي نيست. اگه به كد دقت كنيد، ميبينيد كه به نحوي تنظيم شده كه اگه كسي نباشه، هر موقع يكنفر ديگه آنلاين بشه، تمامي Sessionهاي منقضي شده حذف ميشن.