Nghe có vẻ như bạn đã có những điều cơ bản bảo hiểm. Tuy nhiên, nếu bạn đang làm tất cả theo cách thủ công, thì bạn có hiệu quả chỉ cần triển khai $_SESSION
của riêng mình và không tận dụng được thực tế là nó có thể làm tất cả những gì cho bạn.
Nếu bạn muốn sử dụng cơ sở dữ liệu để xử lý một phiên, bạn có thể ghi đè lên phiên xử lý mặc định của riêng mình. Hãy xem session_set_save_handler(). Tôi làm điều này trong các ứng dụng của tôi.
class SessionHandler
{
public function open($save_path, $session_name)
{
$this->sessionName = $session_name;
return(true);
}
public function close() {
//stuff
}
public function read($id) {
$expiretime = date("Y-m-d H:i:s",time() - $this->maxLifeTime);
$sql = "SELECT * FROM sessions where sessionid='".$this->db->escapeData($id)."' AND lastupdated>='".$expiretime."' LIMIT 1";
$result = $this->db->query($sql);
//etc.
}
//etc.
public function setAsSessionHandler()
{
session_set_save_handler(
array($this,'open'),
array($this,'close'),
array($this,'read'),
array($this,'write'),
array($this,'destroy'),
array($this,'gc')
);
}
}
$sessionHandler = new SessionHandler();
$sessionHandler->setAsSessionHandler();
Bạn có thể có tất cả chức năng bạn đã mô tả chính mình bằng cách sử dụng tính năng này, nhưng vẫn có sức mạnh $ _SESSION để làm điều đó cho bạn. Ví dụ, nếu bạn muốn thêm một kiểm tra IP để xem phiên đó vẫn còn hợp lệ trước khi bạn bắt đầu nó, bạn có thể thêm rằng đó là một phần của chức năng "mở". Nếu bạn muốn ghi dữ liệu phiên vào mười cơ sở dữ liệu khác nhau (không phải là bạn muốn), bạn có thể thực hiện điều này trong hàm 'write'.
Các chức năng này đều được sử dụng dựa trên cách bạn sử dụng $ _SESSION và bằng cách đặt chúng vào một lớp đơn giản, bạn có thể quản lý cách hoạt động rất hiệu quả.
Bạn sẽ thấy rằng id phiên là thông số được chuyển đến các chức năng đọc/ghi/hủy và bạn vẫn sẽ quản lý theo cách tương tự bằng cách sử dụng thường trình tạo GUID của mình.Tuy nhiên, bạn có thể gắn kết quá trình tạo và kiểm tra vào lớp trình quản lý phiên này và chỉ đơn giản là có hàm open() làm chúng. Tập trung, không ồn ào, không ồn ào.
Bạn đang sáng tạo lại bánh xe bạn của tôi –