tôi sử dụng một lớp cho phiên như Phil gợi ý. Nếu bạn gọi session_start() theo cách thủ công, bạn sẽ ràng buộc mã của mình với việc thực thi phiên PHP. Cuộc gọi của tôi để session_start được bảo vệ bởi lớp phiên của tôi với những điều sau đây:
if (!isset($_SESSION))
{
// If we are run from the command line interface then we do not care
// about headers sent using the session_start.
if (PHP_SAPI === 'cli')
{
$_SESSION = array();
}
elseif (!headers_sent())
{
if (!session_start())
{
throw new Exception(__METHOD__ . 'session_start failed.');
}
}
else
{
throw new Exception(
__METHOD__ . 'Session started after headers sent.');
}
}
Edit:
Đoạn mã trên sẽ đi vào lớp phiên của bạn (và có lẽ được gọi một cách nào đó bởi constructor của nó). Dòng lệnh PHP tạo một mảng thay vì gọi session_start (không hoạt động trên dòng lệnh).
Khi kiểm tra mã mà dựa vào biến session tôi nhạo báng các biến session trong thử nghiệm của tôi:
$_SESSION = array('key1' => 'value you want', 'key2' => 'etc.');
Điều này cho phép bạn kiểm tra tất cả các thiết lập phiên có thể bạn sẽ nhận được trên trang.
Kiểm tra xem các giá trị phiên được tạo thuộc về mã tạo chúng theo ý kiến của tôi hay không, vì vậy việc chế nhạo sự tồn tại của chúng có vẻ ổn với tôi. Bằng cách này, bạn đang thử nghiệm từng đơn vị riêng biệt hơn là kết hợp chúng và giữ giá trị phiên giữa các thử nghiệm.
Tôi muốn truy cập dữ liệu phiên trong một lớp chuyên dụng và giả định rằng trong các thử nghiệm. – Phil
Các phiên CI là các cookie vô hiệu, vì vậy, chúng hoạt động trong các trình duyệt –
Cảm ơn Phil và Damien đã trả lời .. @Phil Làm cách nào để tôi làm điều đó? Vì vậy, xin lỗi im hoàn toàn noob về điều này .. Tôi có thể yêu cầu một ví dụ hoặc thủ tục nếu nó ok với bạn .. thx –