PDA

View Full Version : سوال: مشکل با شمارش اعضا انلاین



redhat2
پنج شنبه 15 فروردین 1392, 21:24 عصر
سلام به دوستان ، من این کد را نوشتم ک هتعداد اعضای آنلانی سایت را محاسبه می کنه و نشون میده ، حالا یه مشکلی هست ، اینم اینکه اگه یه کاربر logout نکنه و مثلا پنجره را ببنده ، چطور باید session اون را نابود کرد و یا به عبارتی فیلد Session_state موجود در دیتابیس را از 1 ( یعنی آنلاین بودن و بودن Session ) را به صفر ( یعنی آنلاین نبودن و از بین رفتن session ) تغییر بدیم .
اینم کد ها :

index.php :



<?php
session_start();
if (!empty($_POST['username']) && !empty($_POST['password'])) {
$db = new PDO("mysql:dblocal=localhost;dbname=testuseronline", "root", "");
$state = $db->prepare("select * from users where username = :username and password = :password");
$state->execute(array(":username" => $_POST['username'], ":password" => $_POST['password']));
if ($state->rowCount() == 1) {
$session_state_num = (int) 1;
$_SESSION['login_user'] = $_POST['username'];
$session_state = $db->prepare("update `users` set session_state = :session_state where username = :username");
$session_state->execute(array(":session_state" => $session_state_num, ":username" => $_POST['username']));
header("location:member.php");
}
} else {
echo "Fill The All Field . ";
}
?>
<form action="" method="POST">
<label>Username</label><br>
<input type="text" name="username" /><br>
<label>Password</label><br>
<input type="password" name="password" /><br>
<input type="submit" value="click" />
</form>


counter : شمارش اعضا ی آنلاین :



<?php

$db = new PDO("mysql:dblocal=localhost;dbname=testuseronline", "root", "");
$session_state_num = (int) 1;
$state = $db->prepare("select username from users where session_state = :session_state");
$state->bindParam(":session_state", $session_state_num);
$state->execute();
echo count($state->fetchAll(PDO::FETCH_ASSOC));
?>



member.php :



<?php
session_start();
if (isset($_SESSION['login_user'])) {
echo $_SESSION['login_user'];
?>
<a href="logout.php">خروج</a>
<?php
}
?>



logout.php :



<?php

session_start();
if (isset($_SESSION['login_user'])) {
$session_state_num = (int) 0;
$db = new PDO("mysql:dblocal=localhost;dbname=testuseronline", "root", "");
$session_state = $db->prepare("update `users` set session_state = :session_state where username = :username");
$session_state->execute(array(":session_state" => $session_state_num, ":username" => $_SESSION['login_user']));
unset($_SESSION['login_user']);
header("location:index.php");
}
?>



لطفا به بررسی بفرمایید . ممنون .

khanlo.javid
پنج شنبه 15 فروردین 1392, 22:33 عصر
اگه برای سشن تاریخ ماندگاری تعیین نکنی وقتی مرورگر رو ببنده سشن پاک میشه.

redhat2
جمعه 16 فروردین 1392, 12:00 عصر
اگه برای سشن تاریخ ماندگاری تعیین نکنی وقتی مرورگر رو ببنده سشن پاک میشه.
یه مثال می زنید .

MRmoon
جمعه 16 فروردین 1392, 12:09 عصر
نگا یه فیلد تایم بذار هر 10 دقیقه اگه کاربر صفحه رو باز نکرد فیلدت رو 0 کن

redhat2
جمعه 16 فروردین 1392, 12:14 عصر
نگا یه فیلد تایم بذار هر 10 دقیقه اگه کاربر صفحه رو باز نکرد فیلدت رو 0 کن
یه فلید Time بذارم تویه دیتابیس و اون را برای هر دقیقه تنظیم کنم ، یعنی اگه صفحه ی member را باز نکرد ، این فیلد را صفر کنه ؟ درسته ؟ ولی خوب چطوری اینکارو انجام لدم ، میشه یه نمونه کد بذارین .