2012-02-12 28 views
0

有沒有辦法使用戶的cookie無效?有沒有辦法使用戶的cookie無效?

場景:

  1. 用戶來到我的網站(我能得到我想要的任何數據);
  2. 用戶離開頁面;
  3. 經過一段時間後,來自另一臺服務器的回撥將附帶用戶標識。此時,我需要使用戶會話和cookie無效。

隨着會議,這是簡單的:

session_id($user['session_id']); 
session_destroy(); 

如何實現與餅乾一樣的嗎?

請參閱此帖子下的評論瞭解更多詳情以及它如何與Facebook相關。

簡單的解決方案是將PHP-SDK正在將關於用戶的信息從cookie存儲到會話中的位,但轉到包文件通常是一個壞主意。

+1

你是什麼意思,「從另一臺服務器的回調帶有用戶ID」? – Gumbo 2012-02-12 08:47:20

+0

您並不是「使cookie無效」,而是使cookie的數據無限延伸到與請求一起使用的權限。一,你怎麼知道它來自不同的服務器?二,如果你可以確定一個請求是不合法的,那麼無論該cookie的數據在你的服務器上引用了什麼,以便允許它代表某個用戶執行操作,也就是說,無論會話被指示,還是其他任何內容。但是,Cookie只是該數據的傳輸方式。 – 2012-02-12 08:51:15

+0

@JaredFarrish該請求只能從Facebook服務器接受。問題是Facebook SDK使用cookie來獲取有關用戶的一些數據(用戶ID,[..])。現在,系統設計邏輯是這樣的:如果FB PHP-SDK告訴我存在當前的用戶ID,這意味着該用戶被認證 - >繼續檢查用戶是否在DB中。如果沒有,請獲取有關用戶的信息。這是拋出異常的地方,因爲實際上應用程序不再有權訪問這些信息。所以我需要想出一種方法來刪除PHP-SDK用來存儲這些信息的cookie。 – Gajus 2012-02-12 08:58:12

回答

3

編輯

你的其他意見建議你不是真的知道什麼餅乾字面上,所以我提前道歉,如果你已經明白我做一下解釋。

雖然我懷疑你需要回答或解決您的實際關注一些具體的Facebook的幫助,我想指出什麼餅乾居然是:

HTTP/1.1 200 OK 
Content-type: text/html 
Set-Cookie: name=value 
Set-Cookie: name2=value2; Expires=Wed, 09 Jun 2021 10:18:14 GMT 

http://en.wikipedia.org/wiki/HTTP_cookie#Setting_a_cookie

這是怎麼了cookie在客戶端和服務器(請求者/響應者)之間傳輸。您可以使用Firebug或Chrome控制檯中的Net選項卡來查看請求的發送方式以及來回發送的數據。它們本質上並非「系統地記錄」,本身不是有限的「事物」,而只是包含在請求和響應的分組中的報頭的一部分,類似於電子郵件報頭中的CC/BCC字段:僞 - 但是具有描述性。

要達到的效果在使用之前驗證Cookie是必需的,您需要確定如何將參考ID附加到cookie,或者(或者)檢測具有必須存在的計算代碼的特定cookie其他數據在請求中提交。在Jan's answer中描述了另一種方法。

但是,Cookie通常不以這種方式處理。它們只是傳輸,意味着結束,填充GET和POST之間的空白。


你不是「無效餅乾」這麼多無效該cookie的數據擴展不管是誰在請求一起使用它的權限。

一,你怎麼知道它來自不同的服務器?二,如果你可以確定一個請求是不合法的,無論該cookie的數據在你的服務器上引用了什麼,以便它允許代表一個用戶執行動作,都需要被刪除,即無論會話是否被終止/銷燬,或者其他什麼其他。

但是,Cookie只是該數據的傳輸方式。您必須能夠攔截,檢測並阻止提供給它的任何訪問權限,以使其「無用」。

如果您要提供某些具體內容,請提供更多信息。但基本上,您似乎只需要有一種方法可以忽略包含您認定爲無效或真實的數據或提供不正當訪問(對冒名頂替者)的數據的Cookie。

1

您無法爲未直接向您的服務器發送請求的用戶設置(取消設置/無效)Cookie。你將不得不做更多的工作。

我會去這樣理解:

商店這餅乾你設置一個用戶的地方(DB,Redis的,等等)。這樣你將知道哪些cookies用戶擁有。然後,當請求無效時,將存儲中該用戶的Cookie標記爲已刪除(或類似的內容)。然後每次用戶請求您的頁面時,請檢查您的存儲中是否有任何已刪除的Cookie。如果他已經摧毀了他的會話並且使他的cookie無效(例如設置它們)。

0

Cookie居住在客戶端,您可以在服務器端不做任何事情。 但是,如果您的「經過一段時間」意味着cookie應該在一段時間後過期,那麼您應該在設置cookie時設置到期時間。您不必擔心用戶是否仍在他的頁面上,因爲如果他在一段時間後離開並再次訪問,瀏覽器會爲您處理。

例如,下面的代碼顯示瞭如何設置1小時後應該過期的cookie。

$value = 'something from somewhere'; 

setcookie("TestCookie", $value); 
setcookie("TestCookie", $value, time()+3600); /* expire in 1 hour */ 
setcookie("TestCookie", $value, time()+3600, "/~rasmus/", "example.com", 1); 
+0

這沒有意義。在使用它之前,系統上必須有某種參考ID來批准cookie服務器端。 – Gajus 2012-02-12 09:01:41

+1

@Guy - 餅乾本質上不具備參考ID。它們實際上只是用來傳輸(在大多數情況下)作爲客戶端和服務器之間頭部的一部分的短片段數據。 – 2012-02-12 09:04:55

相關問題