2010-11-02 25 views
5

Tôi có một ứng dụng PHP mà tôi đang tìm cách giới hạn số lượng người dùng có thể hoạt động tại bất kỳ thời điểm nào. Tôi muốn giữ nó càng nhẹ càng tốt vì lý do thực hiện nó là bởi vì máy chủ hiện tại của chúng tôi không thể xử lý tải - do đó đây là giải pháp tạm thời cho đến khi chúng tôi có thể nâng cấp. Chúng tôi lưu trữ các phiên của chúng tôi trong memcache vì vậy tôi đã viết kịch bản sau đây để đếm các phiên hoạt động và lưu trữ nó trong một tập tin phẳng - kịch bản này được chạy mỗi 5 phút.Giới hạn người dùng cho ứng dụng PHP của tôi - với mã ví dụ

<?php 
    $memcache = new Memcache; 
    $memcache->connect('127.0.0.1', 11211); 
    $activeSessions = $memcache->getStats(); 


$file_content = <<<TEXT 
<?php 

\$activeSessions = {$activeSessions['curr_items']}; 

?> 
TEXT; 

file_put_contents("activesessions.php", $file_content); 
?> 

Bây giờ ở phía trên cùng của mỗi trang nó rất dễ dàng để tìm hiểu có bao nhiêu người dùng đang hoạt động ... Vấn đề của tôi bây giờ là nếu có nhiều hơn giới hạn để ngăn chặn nhiều người tạo phiên. Lý do tại sao đây là một vấn đề là tôi không có cách nào nói nếu người dùng tải trang đã có một phiên hoạt động mà không làm một cái gì đó như:

<?php 

include ('activesessions.php'); 
//uid is the users facebook id 
session_id(md5($uid.$secret)); 
session_start(); 
if ($activeSessions > $limit && empty($_SESSION)) 
{ 
    session_destroy(); 
    include('limit_message.php'); 
    exit; 
} 
?> 

mà nên làm các trick nhưng trong quá trình đó nó sẽ tạo ra một phiên để kiểm tra xem phiên có tồn tại hay không: S ... do đó làm lệch số phiên hoạt động của tôi.

Vì vậy, về cơ bản tôi có giải pháp ... câu hỏi của tôi là liệu có ai có câu hỏi hay hơn không? Tuy nhiên, nếu bạn nghĩ rằng giải pháp của tôi là tốt nhất xin vui lòng viết ý kiến ​​hoặc up-bỏ phiếu cho tôi biết: D

Xin vui lòng giúp :)

+0

Rất nhiều lượt xem và không phản hồi một chút: S –

+0

Có thể trùng lặp với [Đếm và giới hạn số lượng người dùng trên ứng dụng của tôi] (http://stackoverflow.com/questions/4065026/). – netcoder

Trả lời

8

Nếu bạn gọi session_id() mà không cần bất kỳ thông số nó sẽ trở lại sesssion id hiện tại của người dùng hoặc một chuỗi trống nếu không có id phiên hiện tại, như được nêu trong PHP function manual. Dựa trên những gì bạn có, bạn sẽ muốn làm một cái gì đó như thế này:

include ('activesessions.php'); 
//uid is the users facebook id 

if ($activeSessions > $limit && session_id() == '') 
{ 
    include('limit_message.php'); 
    exit; 
} 

session_id(md5($uid.$secret)); 
session_start(); 

Đây chỉ là một phím tắt để kiểm tra nếu một cookie được thiết lập với tên phiên, và nếu như vậy mà giá trị là một phiên hợp lệ chuỗi id.

+1

Bạn của tôi là một huyền thoại thực sự: D –

+0

Không sao cả. Một điều cần nhớ là theo dõi người dùng đang hoạt động không thực sự giống như các phiên hoạt động, nhưng có vẻ như bạn nhận được điều đó. – DrPerdix

Các vấn đề liên quan