Jun
28

Sử dụng session trong CakePHP

Author admin    Category Manual     Tags

Trong CakePHP bạn có thể sử dụng session ở cả View và Controller thông qua helper Session và component Session. Trước khi sử dụng helper và component Session, bạn phải khai báo thông qua biến $helpers và $components, mặc nhiên các bạn biết khai báo điều này, nếu không các bạn có thể tham khảo lại các bài trước.

Cho dù là dùng helper (trong view – $session->…) hay component (trong controller – $this->Session->…) thì Session của CakePHP cũng có các hàm như sau:

1. write($name, $value)

- Lưu session có giá trị $value vào tên $name
- $name có thể sử dụng dấu chấm (.) để tạo thành mảng session

Ví dụ:

//lưu thông thường
$this->Session->write('eyeColor', 'Green');
 
//lưu thành mảng session Person
$this->Session->write('Person.eyeColor', 'Green');
$this->Session->write('Person.handColor', 'Red');

2. read($name)

- Lấy giá trị của session thông qua tên
- Ví dụ:

echo $this->Session->read('Person.eyeColor');
//kết quả
Green
 
pr($this->Session->read('Person'));
//kết quả
Array
(
    [eyeColor] => Green
    [handColor] => Red
)

3. check($name)

- Kiểm tra xem có tồn tại session có tên là $name hay không
- Ví dụ:

$this->Session->check('Person')
//kết quả
true

4. delete($name)

- Xóa session thông qua tên
- Ví dụ:

//chỉ xóa eyeColor của Person
$this->Session->delete('Person.eyeColor');
 
//xóa toàn bộ Person
$this->Session->delete('Person');

5. destroy()

- Xóa toàn bộ cookie và session lưu trong file tạm cũng như toàn bộ session của PHP

$this->Session->destroy()

6. error()

- Xác định lỗi cuối cùng lên quan tới session

Ghi chú: cách lưu trữ session, thời gian lưu trữ session, các bạn xem thêm trong bài Giải thích một số cấu hình trong file core.php

14 Comments to “Sử dụng session trong CakePHP”

  • BeanGold 28/11/2010 at 2:16 pm

    Em mới tìm hiêu về cakephp gần đây, cho em hỏi giữa SESSION và COOKIE nên sử dụng cái nào tốt hơn ?

  • admin 03/12/2010 at 11:38 pm

    Bạn cần phải phân biệt 1 điểm cơ bản là:

    SESSION: Lưu trữ trên server

    COOKIE: Lưu trữ trên client, tùy theo từng trình duyệt

    Dữ liệu lưu trữ dạng cookie có thể bị đọc bởi user 1 cách dễ dàng

  • haind 25/09/2011 at 3:50 pm

    ban ơi cho mình hỏi. minh bị lỗi ở Fatal error: Call to a member function flash() on a non-object in D:\PhanMemLapTrinh\xampp\htdocs\prevoir\cake\libs\view\layouts\default.ctp on line 43. Đọc trên mạng thì mọi người nói là khi dùng cake 1.3 thì không tự động có session mà phải khai báo ở trang app_controller, mình cũng đã khai báo các var $components = array(‘Session’,'Auth’);
    var $helpers = array(‘Html’, ‘Form’,'Javascript’,'Ajax’,'Common’); mình đã khai báo trong lớp VnpostController. rồi, nhưng vẫn báo lỗi, và cả ở trang trong của nó nữa vẫn ko được. bạn xem mình bị lỗi gì với. Hi vọng sớm được hồi âm

  • haind 25/09/2011 at 4:07 pm

    cái chỗ dòng 43 là Session->flash(); ?>. còn cái VnpostController là lớp mình chạy index. cái này do lỗi trong lib của cake gây ra, mình mới làm quen nên chưa biết sửa thế nào.

  • admin 25/09/2011 at 11:28 pm

    Trong controller thì có hàm $this->Session->flash(). Còn ngoài view (.ctp) thì không nhớ có hàm flash không nữa. Nếu có thì dùng $session->flash(). Lỗi của bạn là không có function flash()!

  • Bich Yen 29/04/2012 at 4:14 pm

    Cho mình hỏi. Mình có 2 Controller , trong Controller thứ 1 mình lưu giá trị vào biến Session, bây giờ qua Controller thứ 2, mình muốn lấy lại giá trị đã lưu vào biến Session đó, và lưu nó vào Database thì phải làm thế nào…Mong được giúp đỡ!!

    • admin 30/04/2012 at 10:17 pm

      Giả sử ở controller 1 bạn lưu session:

      $this->Session->write(‘key_1′, 123);

      thì sang controller 2 bạn dùng hàm read để lấy:

      $this->Session->read(‘key_1′);

      • bich yen 07/05/2012 at 9:29 am

        Cảm ơn bạn đã giúp đỡ, nhưng mình đã làm như vậy nhưng vẫn không được

  • bich yen 07/05/2012 at 9:14 pm

    mình đã thử nhiều lần như cách bạn nói nhưng khi sang controller thu 2 giá trị của session =null. Và khi mình cho session vào views/element thi khi gọi element đó trong controller khác giá trị của session vẫn không lấy được. Mong bạn giúp mình lần nữa.

    • admin 07/05/2012 at 11:24 pm

      Ngay trong 1 function của 1 controller, nếu bạn lưu session sau đó lấy session lên thì có giá trị không bạn?

      Bạn đang config trong core.php là dùng kiểu lưu session nào: php, cake, database (nếu dùng database thì phải có table cake_session)

      Bạn đang dùng cakephp version nào?

      • bich yen 08/05/2012 at 8:38 am

        Ngay trong 1 function của 1 controller, mình vẫn lấy được giá trị của biến Session, nhưng qua Controller khác giá trị của nó bằng NULL. Mình lưu biến Sesison kiểu php, mong bạn giúp đỡ!

        • admin 10/05/2012 at 12:37 pm

          Bạn thử tăng thời gian timeout của session trong core.php lên cao hơn nữa xem sao

          Đồng thời, thử dùm mình:

          - Chuyển lưu trữ session sang dạng cake, nếu vẫn không được thử chuyển sang dạng database (lưu ý phải import file .sql tạo table cake_session

  • hanh 08/05/2012 at 9:19 pm

    Chào Admin!
    Mình co 2 bảng
    Application(id, reccruitings_id,……..)
    EduApp(id,Applications_id,…….)
    Mình muốn xóa dữ liệu trong bảng EduApp thì đồng thời dữ liệu trong Application cũng được xóa theo mã tương ứng Applications_id thì có thể xóa được không. Mong bạn giúp đỡ, cảm ơn bạn

Post comment

Follow us on Twitter! Follow us on Twitter!
Diễn đàn CakePHP cho người Việt Nam

Bài viết mới

Thảo luận mới

TAG

Calendar

June 2010
M T W T F S S
    Jul »
 123456
78910111213
14151617181920
21222324252627
282930  

Lưu trữ

Blogroll

Thống kê

5 khách