2010-05-10 37 views
7

Câu hỏi nhanh: Người ta có thể đặt đường dẫn nơi cookie hợp lệ, nhưng cũng có thể nhận được (đọc) đường dẫn này từ cookie (bằng PHP) không?Có thể nhận đường dẫn cookie được lưu trữ không?

Hoặc người nào khác: có thể kéo dài thời gian của cookie mà không biết đường dẫn của nó là gì (nhưng vẫn giữ nguyên đường dẫn)?

+0

Bạn nên khắc phục logic của ứng dụng. Không cần phải ở trong trạng thái mà bạn không biết cài đặt cookie nào bạn đã sử dụng trước đây. Chỉ cần lưu trữ đường dẫn mà bạn đã sử dụng trong 'setcookie (...)' và sau đó sử dụng nó để viết lại cookie. – caw

Trả lời

8

Vì hầu hết các trình duyệt vẫn sử dụng đặc điểm kỹ thuật của Netscape (xem cached version of http://wp.netscape.com/newsref/std/cookie_spec.html) và không phải là một quy định tại RFC 2109 hoặc RFC 2965, các yếu tố danh sách trong lĩnh vực tiêu đề Cookie yêu cầu sẽ chỉ bao gồm tên và giá trị cặp:

Khi yêu cầu URL từ máy chủ HTTP, trình duyệt sẽ khớp URL với tất cả các cookie và nếu có bất kỳ cookie nào khớp với nhau, một dòng chứa các cặp tên/giá trị của tất cả các cookie phù hợp sẽ được bao gồm trong yêu cầu HTTP. Dưới đây là định dạng của dòng đó:

Cookie: NAME1=OPAQUE_STRING1; NAME2=OPAQUE_STRING2 ... 

Chỉ có thông số kỹ thuật mới hơn (RFC 2109 và RFC 2965) cho phép khách hàng để gửi các con đường trong yêu cầu (đoạn trích từ RFC 2109):

cú pháp cho tiêu đề là:

cookie   =  "Cookie:" cookie-version 
         1*((";" | ",") cookie-value) 
cookie-value =  NAME "=" VALUE [";" path] [";" domain] 
cookie-version =  "$Version" "=" value 
NAME   =  attr 
VALUE   =  value 
path   =  "$Path" "=" value 
domain   =  "$Domain" "=" value 

[...] giá trị cho thuộc tính con đường phải là giá trị từ các thuộc tính path, nếu có, của tiêu đề phản hồi Set-Cookie tương ứng. Nếu không, thuộc tính sẽ bị bỏ qua khỏi tiêu đề yêu cầu Cookie. […]

+0

Ah đúng, và tôi không thể mong đợi tất cả người dùng có đặc tả mới hơn này. Vì vậy, tôi sẽ cần phải tìm cách tiếp cận khác. – RemiX

+0

@RemiX: Rất tiếc, hầu hết các trình duyệt vẫn sử dụng đặc điểm kỹ thuật cũ. – Gumbo

0

Không có cách nào để PHP đọc đường dẫn cookie vì trình duyệt chỉ gửi tới máy chủ giá trị của các cookie cần gửi, không có gì khác.

Bạn có thể thử đặt lại cookie mà không đưa ra đường dẫn nhưng tôi rất nghi ngờ rằng nó sẽ hoạt động. Có thể có nhiều cookie có liên quan khác nhau có cùng tên và đường dẫn chính xác hơn và ít hơn. Nếu bạn đã cố gắng thiết lập cookie có cùng tên nhưng không có trình duyệt đường dẫn sẽ không biết cookie nào nên cập nhật (có thể là đường dẫn chính xác nhất) nhưng điều đó có thể dẫn đến lỗi bảo mật khi cookie chính xác bạn mong đợi bộ chưa được đặt).

1

có bạn có thể thay đổi/kéo dài thời gian cookie khi cookie được đặt làm cookie gốc. Đó là bạn nên đặt cookie bằng "/" trong tham số cuối cùng. xem mã dưới đây ...

setcookie("Message", $msg, time()+60, "/");

nếu không muốn nói, về cơ bản các tập tin cookie sẽ được lưu trữ trong các đường dẫn hiện tại (root trang). bạn có thể thử truy cập nó.

+0

Cảm ơn, nhưng tiếc là tôi cũng muốn nó làm việc khi nó không phải là một cookie gốc (nếu tôi chỉ sử dụng cookie gốc tôi sẽ biết 'đường dẫn' đã và tôi sẽ không có vấn đề này). – RemiX

3

bao gồm đường dẫn vào giá trị cookie quá

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