Session

Thảo luận trong 'PHP' bắt đầu bởi jinyotino, 19 Tháng mười hai 2009.

  1. Offline

    jinyotino

    • Friends

    Số bài viết:
    569
    Đã được thích:
    211
    Điểm thành tích:
    140
    Trang web HTML thông thường sẽ ko thể truyền dữ liệu từ trang này sang trang khác. Nói 1 cách khác là : tất cả thông tin trở thành quên lãng khi một trang web mới được tải . Điều này gây khó khăn cho một số công việc như là mua hàng ( shopping carts) - những thứ cần thiết dữ liệu ( sản phẩm người dùng đã chọn) ghi nhớ từ trang này sang trang khác

    Khái niệm về Sessions trong PHP

    PHP session giải quyết vấn đề này bằng cách cho phép lưu trữ dữ liệu của người dùng trên server để sử dụng về sau ( như username, món hàng ...)Tuy nhiên những thông tin session này chỉ là tạm thời và thường bị xoá đi ngay khi người dùng rời khỏi trang web đã dùng session.
    Chính vì tính tạm thời này mà nếu bứng dụng của bạn cần thiết lưu trữ dữ liệu 1 cách lâu dài , bạn hãy dùng các cách lưu trữ khác như là csdl Mysql

    Session hoạt động bằng cách tạo 1 chuỗi unique (UID) cho từng vistore và chứa thông tin dựa trên ID đó. việc này sẽ giúp tránh tình trạng dữ liệu bị xung đột giữa các user
    Lưu ý: Nếu bạn vẫn còn ít kinh nghiệm về việc dùng session trong ứng dụng thì ko nên dùng nó trên các website đòi hỏi bảo mật cao vì rất dễ gây ra các lỗ hổng bảo mật nguy hiểm
    Bắt đầu với PHP Session
    Việc đầu tiên trước khi bạn làm bất cứ việc gì với session là bạn phải chạy nó trước, và nó dc đặt ngay trên đầu trong code của bạn, trước khi HTML dc xuất ra

    Dưới đây là 1 ví dụ đơn giản về việc tạo session trong PHP

    PHP Code:

    Code:
    đoạn mã ngắn trên sẽ đăng kí cho ng dùng 1 session ở trên Server, cho phép bạn lưu thông thông tin của ng dùng và đưa nó vào UID cho session của user đó

    Lưu giá trị của session

    Khi bạn muốn lưu trữ 1 thông tin nào đó ở session, dc dùng như 1 mảng kết hợp. đó là nơi bạn lưu và lấy dữ liệu ra. sau đây là 1 ví dụ đơn giản cho việc đơn giản này ^^

    PHP Code:

    Code:
    trong ví dụ này, chúng ta đã học dc cách lưu trữ của biến session thông qua mảng kết hợp $_SESSION và cũng như cách lấy nó ra

    Sử dụng SESSION

    Bây giờ chúng ta đã biết cách lưu và lấy dử liệu từ biến $_SESSION, mọi chuyện thật dễ dàng phải ko , và tiếp theo ta sẽ tìm hiểu 1 vài hàm liên qua đến session.
    Khi bạn tạo 1 biến và lưu nó vào 1 session, bạn có lẽ muốn dùng nó sau này, tuy nhiên, trước khi bạn dùng biến session đó, bạn nên kiểm tra nó đã dc khởi tạo hay chưa.

    Thao tác này được thực hiện thông qua hàm isset, isset là 1 hàm kiểm tra bất kì biến nào và nó đã dc khởi tạo và gán giá trị hay chưa.

    Qua nhưng ví dụ trên, chúng ta có thể tạo 1 bộ đếm đơn giản cho 1 trang bằng cách sử dùng isset để kiểm tra nó đa dc tạo hay chưa và gán giá trị cho nó. Đây là 1 ví dụ:

    PHP Code:

    Code:
    Trong lần chạy đầu tiền của trangm câu lệnh If sẽ trả về false vì chưa có biến session [views] nào được tạo cả. tuy nhiên, khi bạn refresh lại trang đó, thì câu lệnh if sẽ trả về giá trị true và biến đếm counter sẽ tăng lên 1 đơn vị. và sẽ tăng cho mỗi lần chạy của trang đó lên 1.

    Xóa và Hủy Session

    Mặt dù dữ liệu trong session chỉ mang tính chất tạm thời và nó ko yêu cầu phải xóa sau khi sử dụng, nhưng có thể trong trường hợp nào đó bạn phải xóa dữ liệu của nó cho mục đích của bạn.
    Hãy tưởng tượng bạn đang điều hành 1 doanh nghiệp online, và 1 thanh viên đang dùng website của bạn mua 1 món hàng. Thành viên đó đã hoàn tất việc mua hàng (phiên giao dịch) trên website, do đó , bạn phải xóa mọi thứ trong session sau khi việc này hoàn tất.

    PHP Code:

    Code:
    Bạn cũng có thể hủy hoàn toàn các session bằng cách gọi hàng session_destroy

    PHP Code:

    Code:
    Destroy sẽ reset session của bạn, do đó không nên gọi hàm này trước khi bạn còn muốn thao tác lên dữ liệu chứa trong session đó.
    integer, Chiefree=DarkHorse= thích bài này.
  2. Offline

    integer

    • Tiếu Ngạo Giang Hồ

    • :-?
    Số bài viết:
    1.695
    Đã được thích:
    1.313
    Điểm thành tích:
    900
    mặc dù chưa học được dòng code nào nhưng cho em hỏi chỗ này
    Pageviews = 1 là biến phải không anh, nếu là biến sao lại gán sau câu lệnh <? " " ?>
    jinyotino thích bài này.
  3. Offline

    jinyotino

    • Friends

    Số bài viết:
    569
    Đã được thích:
    211
    Điểm thành tích:
    140
    Pageviews = 1

    Ở đây không phải là biến .Nó sẽ hiển thị pageviews =1 nếu mình chạy câu lệnh này :
    echo "Pageviews = ". $_SESSION['views'];

    $_SESSION['views'] ở đây là bằng 1, nhờ phép gán ở trên

    echo là câu lệnh in ra màn hình.

    Xin lỗi bạn hổm nay mình mới vào topic này nên trả lời bạn hơi trễ. cảm ơn vì câu hỏi của bạn, rất có tinh thần học hỏi
  4. Offline

    alt+F4

    • Core i3

    Số bài viết:
    596
    Đã được thích:
    423
    Điểm thành tích:
    450
    Mấy anh cho em hỏi lun.
    Tại sao khi em chèn cùng lúc 2 lệnh này lênh trên cùng thì xảy ra lỗi.
    Vậy dòng
    <?php
    session_start();
    ?>
    có thể chèn sau những đoạn code
    khác được không?
  5. Offline

    chip

    • Thành viên sáng lập

    • Chíp sún
    Số bài viết:
    777
    Đã được thích:
    778
    Điểm thành tích:
    560
    --->đừng nghĩ rằng người khác sẽ hiểu em nghĩ gì , đưa đoạn code đầy đủ lên và dòng thông báo lỗi luôn
    -->em cần biết một điều ,khi em làm việc với một ứng dụng trên máy tính, em mở nó ra và làm một số thay đổi và đóng nó lại.Điều này giống như một phiên làm việc hoàn tất.Khi đó máy tính sẽ biết em là ai.Nó biết khi nào, khi em khởi động chương trình và kết thúc chương trình khi hoàn tất phiên làm việc.Nhưng trên mạng internet có một vấn đề, các web server sẽ không biết em là ai và những gì em làm (có thể làm thay đôi thông tin cá nhân, gửi mail,..), bởi vì giao thức HTTP là giao thức không duy trì trạng thái hay nói cách khác là một giao thức stateless.
    ---->do đó để có thể tiến hành lưu trữ tạm thời các giá trị cũng như thay đổi các giá trị (thông tin mà em muốn thay đổi chẳng hạn) đầu tiền thì em phải cho web server biết em là ai (có thể đăng nhập) nhưng dù là đăng nhập hay làm gì thì em điều phải bắt đầu <?php session_start() ?>, vì sao vì câu lệnh được thực hiện từ trên xuống dưới, nếu em bỏ bất kỳ đâu hay sau bất kỳ câu lệnh nào khác , mặc định php sẽ báo lỗi.
  6. Offline

    lenhatanh

    • Thành Viên Mới

    Số bài viết:
    3
    Đã được thích:
    5
    Điểm thành tích:
    0
    Trước hàm session_start() không được output ra cái gì

    Chỉ gọi session_start() 1 lần

Chia sẻ trang này

Advertising: Linux system admin | nukeviet | nukeviet 4 | Upload ảnh miễn phí