2012-05-10 36 views
15

Tôi cần tìm ra cách bỏ đặt cookie này. Tất cả mọi thứ tôi đã cố gắng cho đến nay đã thất bại.làm thế nào để bỏ đặt cookie trong PHP?

Đây là cách tôi hiện đang hủy cài đặt và nó dường như không hoạt động.

setcookie("user_id", $user_id, time() - 7200); 

Đây là cách tôi đặt nó:

setcookie("user_id", $user_id, time() + 7200); 

tôi có chức năng này được gọi là set_session_from_cookie() để kiểm tra nếu một cookie được thiết lập, và nếu nó được thiết lập, nó bắt đầu một phiên làm việc mới bằng cách sử dụng cookie.

Vấn đề là khi tôi sử dụng điều này trên trang của mình, tôi không thể đăng xuất. Tôi cho rằng điều này là do tôi không thể hủy đặt phiên.

Lý do tôi có chức năng này là nếu người dùng muốn được ghi nhớ sau khi họ kết thúc phiên, họ có thể khởi động lại phiên bằng cách gọi cookie.

function set_session_from_cookie() 
{ 
    if (isset($_SESSION['user_id'])) { 
     echo ''; 
    } else { 
     $_SESSION['user_id']=$_COOKIE['user_id']; 
    } 
} 

Thoát:

<?php 
require'core.php'; 
session_destroy(); 

setcookie("user_id", "", time() - 7200); 
header('Location:/social_learning/site_pages/starter-template.php'); 

tôi đặt cookie của tôi với đoạn mã sau:

if ($rememberme == "on") { 
    $user_id = mysql_result($query_run, 0, 'id'); 
    setcookie("user_id", $user_id, time() + 7200); 
    $_SESSION['user_id'] = $user_id; 
    redirect('home_page.php'); 
} else { 
    if ($rememberme == "") { 
     echo 'ok'; 
     $user_id = mysql_result($query_run, 0, 'id'); 
     echo $user_id; 
     $_SESSION['user_id'] = $user_id; 
     redirect('home_page.php'); 
    } 
} 

Làm thế nào tôi có thể khởi động lại phiên sử dụng cookie lưu mà không sử dụng các chức năng mình đã tạo? Vì hàm này có vẻ khiến người dùng không thể đăng xuất được nữa.

+0

là cookie của bạn cho là toàn bộ địa điểm? –

+0

phải không? làm thế nào tôi có thể nói? – arboles

+4

Không sử dụng thời gian tương đối để xóa cookie. Điều đó làm cho unsetting phụ thuộc vào đồng hồ của người dùng của bạn là chính xác. Sử dụng thời gian của '1', mà sẽ bắt tất cả mọi người nhưng những người có đồng hồ thực sự bị hỏng người nghĩ rằng đó là năm 1970. –

Trả lời

9

Các giải pháp cho vấn đề này là tôi cần thiết để thiết lập các đường dẫn chính xác để bỏ đặt cookie vì tôi đã xóa nó từ một tệp khác mà ban đầu tôi đã đặt nó trong một tệp khác mà ban đầu tôi đã đặt nó.

Tôi đã tìm ra con đường nào tôi cần sử dụng để không được đặt bằng cách tìm cookie bên trong cookie của trình duyệt và sau khi tìm thấy cookie bên trong trình duyệt, đường dẫn được liệt kê gần cookie. Vì vậy, sau đó tôi đặt đường dẫn đến cookie như vậy:

setcookie("user_id", $user_id, time() - 1, "/social_learning/site_pages"); 

Tham số cuối cùng là đường dẫn. Va no đa hoạt động.

gốc setcookie của tôi trông như thế này:

setcookie("user_id", $user_id, time() + 7200, ""); 
24

Đặt ngày hết hạn của cookie thành một thời điểm trong quá khứ (ví dụ như sau một giây sau epoch).

setcookie("yourCookie", "yourValue", 1);

Điều này sẽ khiến cookie hết hạn.

1 được sử dụng thay vì 0, vì 0 đặt cookie hết hạn vào cuối phiên.

+0

được coi là 1 lần trong quá khứ? – arboles

+1

@arboles Thời gian được đưa ra dưới dạng một dấu thời gian UNIX, vì vậy có, 1 là một thời gian dài trước đây :) –

+13

1 là "ngày 1 tháng 1, 19:70 00:00:01 AM" –

3

Nhìn vào hướng dẫn php để biết thông tin trên setcookie

http://php.net/manual/en/function.setcookie.php

Các thuyết minh này nên giải thích quá trình:

bool setcookie (string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]]) 

Cookies phải được xóa với các thông số tương tự như họ đã được thiết lập với. Nếu đối số giá trị là một chuỗi rỗng hoặc FALSE và tất cả các đối số khác khớp với cuộc gọi trước đó tới setcookie thì cookie với tên được chỉ định sẽ bị xóa khỏi ứng dụng khách từ xa. Điều này được thực hiện nội bộ bằng cách đặt giá trị thành 'đã xóa' và hết hạn thời gian đến một năm trước.

Vì đặt cookie có giá trị FALSE sẽ cố gắng xóa cookie , bạn không nên sử dụng giá trị boolean. Thay vào đó, hãy sử dụng 0 cho FALSE và 1 cho TRUE.

+0

tôi hiện đang làm điều này, bằng cách sử dụng các thông số tương tự để xóa, như tôi để thiết lập. và nó không hoạt động. – arboles

6

Có vài vấn đề an ninh liên quan đến bạn mã, tuy nhiên để trả lời câu hỏi của bạn, để bỏ đặt một cookie trong php, tất cả các bạn cần làm là để thiết lập thời gian hết hạn vào một thời điểm trong quá khứ:

setcookie("user_id", "", time()-10, "/"); 

"loginform.php" không phải là miền hợp lệ, có thể là sự cố ở đây.

+0

làm cách nào tôi có thể đặt tên miền, trên máy chủ cục bộ của tôi? – arboles

+0

chỉ cần đặt dấu gạch chéo giống như cái tôi đã có trong ví dụ "/", có nghĩa là cookie này có sẵn cho tất cả tên miền của bạn. –

1

Trong php thủ công, bạn có thể xóa cookie bằng cách thiết lập một ngày hết hạn là trong quá khứ:

setcookie("key","",time()-3600); 

Trong một số trường hợp, bạn nên cung cấp đường dẫn và miền với lập luận.

Trong thực tế, nếu bạn gán một cookie với một chuỗi rỗng, nó sẽ còn được unset:

setcookie("key",""); 
+0

tôi biết, tôi hiện đang làm phương pháp này, và nó không hoạt động. – arboles

+0

Có lẽ bạn có thể phải chỉ định đường dẫn và miền theo cách thủ công. –

4

sử dụng mã này

setcookie("CookieName", "", time()-(60*60*24), "/"); 

làm việc mọi đối với tôi trong tất cả các website

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