2010-01-11 26 views
5

có cơ quan nào có bất kỳ thông tin/liên kết nào về cách tích hợp hệ thống phiên dựa trên cookie không? Tôi đã sử dụng tập tin/mysql, và hiện đang sử dụng memcached. tôi muốn chơi với các phiên apc, nhưng nghĩ rằng tôi muốn đưa ra một cookie, chỉ tôi không biết nhiều về nó.php: các phiên dựa trên cookie

tôi tưởng tượng mình phải viết lớp xử lý phiên của riêng mình?

+0

Tôi không chắc chắn tôi sẽ theo dõi. Bạn có nghĩa là lưu trữ dữ liệu phiên trong cookie? Đó có phải là một ý tưởng tốt? –

+0

Xin lưu ý rằng cookie chỉ có thể lưu trữ tối đa '4KB' dữ liệu. Đây thường là lý do tại sao bạn không thấy lưu trữ phiên dựa trên cookie.Ngoài ra, hãy cân nhắc rằng một số người dùng đã tắt cookie hoàn toàn hoặc được đặt thành quyền truy cập hạn chế với chính sách bảo mật của trình duyệt của họ. –

+1

@cballou: Các phiên cũ thông thường cũng sử dụng cookie. Họ chỉ lưu trữ SESSID, và phần còn lại của dữ liệu được lưu trữ trên máy chủ. Mặc dù tôi nghĩ PHP sẽ thử nhồi SESSID vào tham số 'GET' nếu cookie bị tắt. – mpen

Trả lời

5

Trong dữ liệu phiên PHP thường được lưu trữ trong một tệp. Điều duy nhất được lưu trữ trong cookie là một định danh phiên. Khi phiên được kích hoạt và cookie phiên hợp lệ được tìm thấy, PHP sẽ tải dữ liệu phiên của người dùng từ tệp đó vào một siêu toàn cầu có tên là SESSION vui nhộn.

Phiên cơ bản được bắt đầu sử dụng session_start(); được gọi trước khi bất kỳ văn bản nào được gửi đến trình duyệt. sau đó các mục được thêm vào hoặc bị loại bỏ khỏi đối tượng phiên sử dụng chỉ mục mảng đơn giản ví dụ.

$_SESSION['favcolour'] = 'blue'; 

sau ...

$favcolour = $_SESSION['favcolour']; 

Cookie cơ bản chỉ phiên (không lưu trữ địa phương) có thể được tạo ra với một cuộc gọi đến

set_cookie('favcolour','blue'[,other params]); 

trước khi bất kỳ văn bản được gửi đến trình duyệt, sau đó được truy xuất từ ​​cookie superglobal

$favcolour = $_COOKIE['favcolour']; 

bạn không cần gọi số session_start() nếu chỉ thực hiện các phiên cookie.

tùy chọn [, params khác] được nâng cao hơn và có thể được đọc về đây http://www.php.net/manual/en/function.setcookie.php

phiên có thể trở thành một cuộc thảo luận rất phức tạp, tôi muốn đề nghị thực hiện một số công việc nhẹ trong họ và sau đó mở rộng kiến ​​thức của bạn.

DC

tất cả các bạn đã bao giờ muốn biết về phiên PHP

http://www.php.net/manual/en/book.session.php

DC

Để sử dụng lại mã xử lý session của PHP, bạn sẽ cần phải thêm một ghi handler sử dụng session_set_save_handler và sau đó làm chính xác không có gì trong trình xử lý đó. Đó là bởi vì nó được gọi sau khi đầu ra cho trình duyệt được đóng lại do đó bạn không thể gửi bất cứ điều gì đến trình duyệt.

Trước khi ghi dữ liệu đầu trang không vào trình duyệt, hãy sử dụng các hàm set_cookie và lưu trữ nội dung của mảng $ _SESSION (sau khi nối tiếp và mã hóa) vào cookie. khi các ứng dụng bắt đầu, bạn có thể đọc cookie unserialise nó và đặt nó vào mảng $ _SESSION.

Đó là gợi ý nhanh về những việc cần làm vì tôi chưa bao giờ thực hiện, tôi thích viết tất cả mã cookie của riêng mình. Có thể có một số của gotcha nhưng không khó khăn của nó một vài xét nghiệm nên tìm thấy bất kỳ của gotcha.

DC

+0

Tôi có thể sẽ không chỉ sử dụng cookie, đặc biệt nếu bạn không muốn người dùng giả mạo (hoặc đọc) dữ liệu. – mpen

+0

nếu bạn có một phiên tập tin trang web rất bận rộn dựa trên quá tài nguyên quá. nhưng nếu tôi muốn bảo mật trên tất cả những thứ khác, tôi sẽ sử dụng một db, vì các tệp có thể được đọc. – DeveloperChris

+2

tôi không cần biết cách sử dụng phiên. tôi hoàn toàn hiểu điều đó. các phiên dựa trên cookie (không lưu trữ định danh trong cookie) là một kỹ thuật hợp lệ giúp giảm thiểu số lần tra cứu bộ nhớ cache/tệp/bộ nhớ cache của máy chủ và lưu trữ tất cả dữ liệu cho phiên trong cookie được mã hóa. tôi đoán không ai ở đây hiểu ý tôi là gì. – onassar

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