2011-11-23 121 views
0

我在設計一個認證庫,我正在考慮cookies的設計。我希望你能分享一些想法或建議。auth cookie應該是什麼樣的?

下面是一些真實的例子:

site: stackoverflow.com 
name: usr 
content: t=Q7k6OGJUK39E&s=f3RhRndgkeiv 

site: vimeo.com 
name: uid 
content: 1186974%7Cuser1186974%7C1232475869%1C0 

site: github.com 
name: gh_sess_ 
content: BAh7CjoQZmluZ2VycHJpbnQiJWZlYzdmNWFhNjJmYjJhNDg6OTJkYWQzMjdmMjRiYWY5Ogl1c2VyaQNqzwI6DGNvbnRleHQiBi86D3Nlc3Npb25faWQiJWE1MjU0MDRiNTk0YmZmMzczMHJhNDkzMGYyHzkyBmJiIgpmbGFzaElDOidBY3Rpb25Db250cm9sbGVyOjpGbGFzaDo6Rmxhc2hIYXNoewAGOgpAdXNlZHsA--e9d4def787b537f1bbacdb7d625fc06361fbe46a 
+0

在這可能有一些答案可能會讓你感興趣:http://stackoverflow.com/questions/8237086/good-secure-way-to-remember-a-user-checkbox –

+0

我希望你在發佈前炒作cookie數據? ;-)但如果你解決更具體的問題,這可能會有用,所以人們可以更具體地回答。 – CodeCaster

回答

1

的基礎是至少兩個信息存儲在cookie識別用戶:

  • 事情告訴你這是誰(一個用戶通常ID)
  • 事情告訴你這是真的該用戶(針對用戶ID的類型的挑戰)

讓我們爲約翰用戶ID#42構建一個用戶散列。 約翰的登錄名是「john_demo」 您的網站將有一個祕密的鹽,只是一個隨機字符串,防止僞造哈希。

<?php 
$login = "john_demo"; 
$id = 42; 
$salt = "ùoajamen!k);p67!è§çRIUV"; 
$hash = sha1(sha1("$id:$login:$salt").$salt); 
$cookie_value = base64_encode($id.':'.$hash); 

散列連續被鹽析兩次(兩次sha1調用)。 您可以通過base64解碼cookie,提取id,然後檢查您的cookie有效的db值(並重新構建「官方」hash)來輕鬆檢索用戶信息。

相關問題