Hướng dẫn setcookie php not working - setcookie php không hoạt động

Tôi có trang này đặt cookie và lặp lại một chuỗi nếu bạn kiểm tra hộp kiểm. Chuỗi in chính xác, nhưng cookie không bao giờ được đặt và tôi không biết tại sao.


"; } else { setcookie("cookie", "off", time()+3600*24); echo "You didn't check the checkbox and a cookie was set with a value of:
"; } echo $_COOKIE['cookie']; ?>

Có ai biết tại sao mã trên không hoạt động không?

hỏi ngày 9 tháng 7 năm 2014 lúc 19:48Jul 9, 2014 at 19:48Jul 9, 2014 at 19:48

Hướng dẫn setcookie php not working - setcookie php không hoạt động

Tim timTimTim

2.0954 Huy hiệu vàng26 Huy hiệu bạc43 Huy hiệu đồng4 gold badges26 silver badges43 bronze badges4 gold badges26 silver badges43 bronze badges

Php Superglobal được điền vào thời gian khởi động tập lệnh, và sau đó không được sửa đổi hoặc chạm vào PHP một lần nữa cho cuộc sống của kịch bản. Điều đó có nghĩa là

0 đại diện cho các cookie được gửi đến máy chủ trong yêu cầu HTTP đã kích hoạt tập lệnh. Nó sẽ không hiển thị bất kỳ cookie nào bạn đã thêm/thay đổi/xóa trong suốt vòng đời của kịch bản. Những thay đổi đó sẽ chỉ hiển thị trên yêu cầu tiếp theo.

Ngoại lệ duy nhất cho điều này là

1, được điền khi bạn gọi 
2.

Nếu bạn cần các giá trị đó có trong $ _Cookie ngay lập tức, bạn sẽ phải thêm chúng theo cách thủ công, ví dụ:

setcookie('cookie', $value, ....);
$_COOKIE['cookie'] = $value;

Đã trả lời ngày 9 tháng 7 năm 2014 lúc 19:53Jul 9, 2014 at 19:53Jul 9, 2014 at 19:53

Marc Bmarc bMarc BMarc B

351K42 Huy hiệu vàng404 Huy hiệu bạc488 Huy hiệu đồng42 gold badges404 silver badges488 bronze badges42 gold badges404 silver badges488 bronze badges

Theo hướng dẫn sử dụng PHP tại http://php.net/manual/en/function.setcookie.php:

Nếu đầu ra tồn tại trước khi gọi hàm này, setCookie () sẽ thất bại và trả về sai. Nếu setcookie () chạy thành công, nó sẽ trả về đúng. Điều này không cho biết người dùng có chấp nhận cookie hay không.setcookie() will fail and return FALSE. If setcookie() successfully runs, it will return TRUE. This does not indicate whether the user accepted the cookie.setcookie() will fail and return FALSE. If setcookie() successfully runs, it will return TRUE. This does not indicate whether the user accepted the cookie.

Nói cách khác, hàm

3 không hoạt động vì nó nằm trong trang. Nếu bạn muốn nó hoạt động, bạn sẽ cần đặt chức năng đó trước trang, cụ thể trước bất kỳ tiêu đề nào.

Làm cái này:

";
  } else {
     setcookie("cookie", "off", time()+3600*24);
     echo "You didn't check the checkbox and a cookie was set with a value of:
"; } echo $_COOKIE['cookie']; ?> ...

Đã trả lời ngày 2 tháng 1 năm 2015 lúc 4:12Jan 2, 2015 at 4:12Jan 2, 2015 at 4:12

JDOTJDOTJDotJDot

1752 Huy hiệu bạc8 Huy hiệu Đồng2 silver badges8 bronze badges2 silver badges8 bronze badges

1

Cookie không khởi động cho đến khi chúng được đặt và yêu cầu trang mới được gửi. Điều này là do cookie được gửi với các yêu cầu trang, chúng không xuất hiện một cách kỳ diệu cho máy chủ.

Giải pháp của bạn là làm một trang làm mới sau khi đặt cookie.

// set cookie
setcookie("cookie", "off", time()+3600*24);
// not available because this cookie was not sent with the page request.
echo $_COOKIE['cookie'];

Đã trả lời ngày 9 tháng 7 năm 2014 lúc 19:49Jul 9, 2014 at 19:49Jul 9, 2014 at 19:49

John Condejohn CondeJohn CondeJohn Conde

215K98 Huy hiệu vàng447 Huy hiệu bạc490 Huy hiệu Đồng98 gold badges447 silver badges490 bronze badges98 gold badges447 silver badges490 bronze badges

2

  • Khái niệm Cookie
  • Lưu Cookie
  • Đọc Cookie
  • PHP Cookie
  • Khái niệm về Session PHP
  • Sử dụng Session
  • Hủy Session

Bạn có thể hủy một biến, giá trị ... đã lưu vào Session:

  • Để hủy một biến nào đó lưu trữ trong Session thì dùng lệnh unset ví dụ
    ";
      } else {
         setcookie("cookie", "off", time()+3600*24);
         echo "You didn't check the checkbox and a cookie was set with a value of:
    "; } echo $_COOKIE['cookie']; ?> ...

    86
  • Để hủy toàn bộ Session thì dùng lệnh
    ";
      } else {
         setcookie("cookie", "off", time()+3600*24);
         echo "You didn't check the checkbox and a cookie was set with a value of:
    "; } echo $_COOKIE['cookie']; ?> ...

    87
  • Lần sau truy cập URL cùng domain (tên miền) browser sẽ gửi ngược các Cookie này lên Server và Server sẽ nhận được Cookie, từ đó xác định được thông tin (như username) ...

Nên nhớ Cookie được lưu lại ở Browser, sau đó mỗi lần gửi yêu cầu đến Server nó sẽ tự động gửi thông tin này đến Server

Từ PHP có thể thiết lập Cookie bằng hàm

4 (nhớ phải gọi trước các dòng code xuất html).

setcookie($name, $value, $expire = 0, $path="", $domain = "", $security = false, $httponly = false);
  • 5 là tên cookie, tên này được sử dụng để truy cập vào biến 
    0 để lấy thông tin
  • 1 giá trị gán cho cookie
  • 2 Thời điểm hết hạn (hủy) của cookie, thời gian dạng Unix timestamp, có thể dùng hàm 
    3 để lấy Unix timestamp. Sau thời điểm này Cookie bị hủy lưu tại trình duyệt. Nếu thiết lập là 
    4 thì cookie hủy khi đóng trình duyệt 
  • 5 đường dẫn mà cookie có hiệu lực. Sử dụng 
    6 cho biết cookie có hiệu lực ở cấp độ domain - mọi URL thuộc domain, nếu thiết lập là 
    7 thì Cookie chỉ có hiệu lực với các URL dạng 
    7 và các con của nó như 
    9... Nếu để giá trị mặc định "" thì có hiệu lực theo đường dẫn hiện tại
  • setcookie('cookie', $value, ....);
    $_COOKIE['cookie'] = $value;
    
    50 tên miền
  • setcookie('cookie', $value, ....);
    $_COOKIE['cookie'] = $value;
    
    51 = true nếu sử dụng HTTPS để truyền dữ liệu (mặc định false)
  • setcookie('cookie', $value, ....);
    $_COOKIE['cookie'] = $value;
    
    52 mặc định là false, nếu true thì chỉ cho phép cookie với giao thức HTTP

Ví dụ:

setcookie('cookie', $value, ....);
$_COOKIE['cookie'] = $value;
53

Đoạn mã trên thiết lập lưu Cookie với tên

5, giá trị là 

setcookie('cookie', $value, ....);
$_COOKIE['cookie'] = $value;
55, hết hạn sau 10 phút (tức 600 giây)

Bạn có thể chạy lệnh

setcookie('cookie', $value, ....);
$_COOKIE['cookie'] = $value;
5

Sau đó truy cập địa chỉ

setcookie('cookie', $value, ....);
$_COOKIE['cookie'] = $value;
56 để kiểm tra, ví dụ dùng Chrome

Khi truy cập, phần header trả về có thông tin về thiết lập Cookie, ngược lại nếu đã có Cookie khi trình duyệt gửi yêu cầu - nó thiết lập giá trị cookie vào phần header của request

Hoặc dùng lệnh curl để xem header trả về:

Bạn dùng biến

0 là một mảng để truy cập thông tin cookie do trình duyệt gửi lên. Giống như 
setcookie('cookie', $value, ....);
$_COOKIE['cookie'] = $value;
58 bạn nên dùng
setcookie('cookie', $value, ....);
$_COOKIE['cookie'] = $value;
59 để kiểm tra sự tồn tại của COOKIE.
";
  } else {
     setcookie("cookie", "off", time()+3600*24);
     echo "You didn't check the checkbox and a cookie was set with a value of:
"; } echo $_COOKIE['cookie']; ?> ...

60
";
  } else {
     setcookie("cookie", "off", time()+3600*24);
     echo "You didn't check the checkbox and a cookie was set with a value of:
"; } echo $_COOKIE['cookie']; ?> ...

6

Để yêu cầu trình duyệt xóa cookie bạn sử dụng chính hàm setcookie với thủ thuật đặt thời gian đã hết hạn. Ví dụ:

";
  } else {
     setcookie("cookie", "off", time()+3600*24);
     echo "You didn't check the checkbox and a cookie was set with a value of:
"; } echo $_COOKIE['cookie']; ?> ...

8

Khái niệm về Session

Để trao đổi dữ liệu từ trang này qua trang khác (giữa 2 request) thì làm như thế nào? Ví dụ nếu người dùng đã đăng nhập, thì thông tin đăng nhập được lưu lại và chuyển cho các trang khác nhau trong phiên làm việc để tránh mỗi lần gửi request lại phải đăng nhập, hay người dùng chọn đựa mặt hàng vào giỏ hàng thì phải nhớ để chuyển đến trang thanh toán ... PHP có cơ chế để làm việc này đó chính là

";
  } else {
     setcookie("cookie", "off", time()+3600*24);
     echo "You didn't check the checkbox and a cookie was set with a value of:
"; } echo $_COOKIE['cookie']; ?> ...

61

Session là thông tin về phiên làm việc cho từng khách truy cập, trong PHP nó tạo một file trong thư mục tạm (thư mục này cài đặt ở

// set cookie
setcookie("cookie", "off", time()+3600*24);
// not available because this cookie was not sent with the page request.
echo $_COOKIE['cookie'];
02) để lưu thông tin này, thông tin này được dùng chung cho tất cả các trang mà khách truy cập. Mỗi khách truy cập, dựa vào thông tin trình duyệt gửi lên nó tạo (hoặc phục hồi) một Session riêng cho khách đó. là thông tin về phiên làm việc cho từng khách truy cập, trong PHP nó tạo một file trong thư mục tạm (thư mục này cài đặt ở 2) để lưu thông tin này, thông tin này được dùng chung cho tất cả các trang mà khách truy cập. Mỗi khách truy cập, dựa vào thông tin trình duyệt gửi lên nó tạo (hoặc phục hồi) một Session riêng cho khách đó. là thông tin về phiên làm việc cho từng khách truy cập, trong PHP nó tạo một file trong thư mục tạm (thư mục này cài đặt ở

";
  } else {
     setcookie("cookie", "off", time()+3600*24);
     echo "You didn't check the checkbox and a cookie was set with a value of:
"; } echo $_COOKIE['cookie']; ?> ...

62) để lưu thông tin này, thông tin này được dùng chung cho tất cả các trang mà khách truy cập. Mỗi khách truy cập, dựa vào thông tin trình duyệt gửi lên nó tạo (hoặc phục hồi) một Session riêng cho khách đó.

Sự làm việc của Session có thể vắn tắt như sau:

  • Khi khách lần đầu truy cập, PHP tự động tạo ra một định danh duy nhất cho khách đó, định danh này là một chuỗi ngẫu nhiên - duy nhất. Nó là tham số để xác định tên file dữ liệu session.
  • Một mẩu tin nhỏ Cookie gọi là PHPSESSID (là ánh xạ đến định danh ở trên) sẽ được gửi đến trình duyệt và trình duyệt lưu giữ PHPSESSID này, để sau đó mỗi lần trình duyệt truy cập nó gửi lại PHPSESSID cho PHP.
  • PHP dựa vào PHPSESSID gửi đến để phục hồi - lấy lại dữ liệu từ file là thông tin của SESSION.
  • Session bị hủy - mất khi trình duyệt bị đóng lại, thông thường PHP cũng có tham số ấn định thời gian tồn tại của SESSION, ví dụ như 30 phút.

Như vậy

";
  } else {
     setcookie("cookie", "off", time()+3600*24);
     echo "You didn't check the checkbox and a cookie was set with a value of:
"; } echo $_COOKIE['cookie']; ?> ...

61 là cơ chế lưu trữ và phục hồi thông tin cho phiên làm việc (truy cập) của khách, nhằm trao đổi thông tin khi duyệt từ page này sang page khác. Để Session hoạt động thì còn liên quan tới hỗ trợ
";
  } else {
     setcookie("cookie", "off", time()+3600*24);
     echo "You didn't check the checkbox and a cookie was set with a value of:
"; } echo $_COOKIE['cookie']; ?> ...

64 từ trình duyệt. Ví dụ trong Chrome bạn block Cookie từ facebook, thì bạn không thể đăng nhập được facebook.

Chạy Session - Lưu trữ và lấy thông tin

Session trong PHP bắt đầu hoạt động sau khi bạn gọi hàm

";
  } else {
     setcookie("cookie", "off", time()+3600*24);
     echo "You didn't check the checkbox and a cookie was set with a value of:
"; } echo $_COOKIE['cookie']; ?> ...

65, hàm này sẽ phục hồi dữ liệu SESSION nếu đã có, nếu chưa nó sẽ tạo ra SESSION mới cho bạn. Để sử dụng khuyên nên gọi hàm này ngay khi bắt đầu của Page. Một cách khác mà không cần quan tâm đến gọi
";
  } else {
     setcookie("cookie", "off", time()+3600*24);
     echo "You didn't check the checkbox and a cookie was set with a value of:
"; } echo $_COOKIE['cookie']; ?> ...

65 đó là thiết lập cho PHP tự động chạy hàm này bàng cách
";
  } else {
     setcookie("cookie", "off", time()+3600*24);
     echo "You didn't check the checkbox and a cookie was set with a value of:
"; } echo $_COOKIE['cookie']; ?> ...

6 7 trong
";
  } else {
     setcookie("cookie", "off", time()+3600*24);
     echo "You didn't check the checkbox and a cookie was set with a value of:
"; } echo $_COOKIE['cookie']; ?> ...

68

Khi mà hệ thống session trong PHP được chạy, mặc định nó sẽ gửi về trình duyệt một Cookie với tiền tố

";
  } else {
     setcookie("cookie", "off", time()+3600*24);
     echo "You didn't check the checkbox and a cookie was set with a value of:
"; } echo $_COOKIE['cookie']; ?> ...

69, tất nhiên có thể thay đổi tiền tố này trong php.ini

Ví dụ trang chạy thử Session

";
  } else {
     setcookie("cookie", "off", time()+3600*24);
     echo "You didn't check the checkbox and a cookie was set with a value of:
"; } echo $_COOKIE['cookie']; ?> ...

80
setcookie($name, $value, $expire = 0, $path="", $domain = "", $security = false, $httponly = false);
0

Kiểm tra bạn thấy có Cookie gửi về, cookie này dùng để phục hồi dữ liệu Session

Biến toàn cục

";
  } else {
     setcookie("cookie", "off", time()+3600*24);
     echo "You didn't check the checkbox and a cookie was set with a value of:
"; } echo $_COOKIE['cookie']; ?> ...

81 kiểu mảng là nơi SESSION lưu trữ thông tin - cũng chính là dữ liệu phục hồi được giữa các trang, bạn truy cập biến này trong suốt vòng đời của session để lấy, lưu trữ thông tin. Bạn cũng nên dùng hàm
setcookie('cookie', $value, ....);
$_COOKIE['cookie'] = $value;
59 để kiểm tra một biến session nào đó đã có hay chưa. Ví dụ sau dùng SESSION để đếm số lần một khách truy cập vào website.

Ví dụ đếm lượt truy cập trang của một khách

";
  } else {
     setcookie("cookie", "off", time()+3600*24);
     echo "You didn't check the checkbox and a cookie was set with a value of:
"; } echo $_COOKIE['cookie']; ?> ...

83
setcookie($name, $value, $expire = 0, $path="", $domain = "", $security = false, $httponly = false);
4
setcookie($name, $value, $expire = 0, $path="", $domain = "", $security = false, $httponly = false);
5

Trong đoạn code trên có sử dụng

";
  } else {
     setcookie("cookie", "off", time()+3600*24);
     echo "You didn't check the checkbox and a cookie was set with a value of:
"; } echo $_COOKIE['cookie']; ?> ...

84 để kiểm tra xem Session có tồn tại hay chưa, nếu có rồi mà bạn gọi
";
  } else {
     setcookie("cookie", "off", time()+3600*24);
     echo "You didn't check the checkbox and a cookie was set with a value of:
"; } echo $_COOKIE['cookie']; ?> ...

65 có thể PHP sẽ cảnh báo lỗi Warning

Khi có chạy Session thì dữ liệu trả về cho trình duyệt nó gửi kèm một mẩu tin nhỏ ở phần Header, dữ liệu này là Cookie liên quan đến ID của Session, để request trình duyệt lưu trữ, request tiếp theo nó sẽ gửi dữ liệu này đến Server và PHP sẽ phục hồi Session theo Cookie này.

Hủy Session

Bạn có thể hủy một biến, giá trị ... đã lưu vào Session:

  • Để hủy một biến nào đó lưu trữ trong Session thì dùng lệnh unset ví dụ
    ";
      } else {
         setcookie("cookie", "off", time()+3600*24);
         echo "You didn't check the checkbox and a cookie was set with a value of:
    "; } echo $_COOKIE['cookie']; ?> ...

    86
  • Để hủy toàn bộ Session thì dùng lệnh
    ";
      } else {
         setcookie("cookie", "off", time()+3600*24);
         echo "You didn't check the checkbox and a cookie was set with a value of:
    "; } echo $_COOKIE['cookie']; ?> ...

    87

Từ nắm vững Cookie và Session là cơ sở để xây dựng lên các hệ thống như cho phép user đăng nhập vào website, xây dựng ứng dụng giỏ hàng đặt hàng ...

Source code: session_cookie (Git), hoặc tải rphp-sessioncookie