2013-02-28 53 views
0

對於我的項目,我使用cookie來自動登錄用戶。但是,我不希望用戶知道哪些cookie用於目的。是否可以使用動態cookie名稱?

爲此,我決定把cookie的名稱,以及對內容進行加密。解密這些使用cookies的內容並不會造成太大麻煩。它完美的工作,因爲我想要它。但是,出於兼容性和動態的緣故,我想通過自己的名字動態調用的餅乾,用類似的這樣的代碼:

if(isset($_COOKIE[$encryption->decrypt('username')]){ ... } 

但這似乎並沒有工作。也沒有設置變量與cookie的加密名稱,如:

$cookie_name = $encryption->decrypt('username'); 
if(isset($_COOKIE[$cookie_name]){ ... } 

我目前使用這個腳本的方式(它的工作原理,但似乎有點草率)是這樣的:

if(isset($_COOKIE['Nm9yNCtoK1lTY2M5TnhKWnRvL0NjUT09']){ ... } 

有沒有辦法做到這一點,或者我不得不通過它的預加密名稱來調用cookie,就像我目前所做的一樣?

+0

不要在cookie中存儲任何登錄信息。使用'$ _SESSION'來存儲登錄數據(會話將使用cookie來識別會話,但這與包含加密版用戶名非常不同)。 – zzzzBov 2013-02-28 05:04:57

+0

使用'$ _SESSION'進行自動登錄是不可能的。爲此,我實際上需要cookies。 – 2013-02-28 05:06:01

+0

「自動登錄」是什麼意思? – zzzzBov 2013-02-28 05:06:59

回答

1

如上評論指出,這將是明智的做法是使用一個會話。

在PHP中,會話可以被製作成「老大難」 ......又名:當用戶關閉瀏覽器,不要迷路。

查看此答案。

https://stackoverflow.com/a/9797962/1521230

編輯:

「重置」 會話cookie的持續時間在每個頁面上的每個要求,在session_start()之後,你也想用session_regenerate_id(TRUE)。

+0

drew010在他的回答中說:「Cookie的使用期限是從會話第一次啓動時開始設置的,而不是在後續請求中設置的」,這並不意味着會話啓動後會話的壽命爲7天,即使在會話的整個生命週期內訪問過網站,用戶仍然需要重新登錄網站。 – 2013-02-28 05:17:13

+0

它也說「如果你想從當前時間延長7天的會話的生命週期,請參閱session_regenerate_id()」。我添加到我的答案。 – 2013-02-28 05:27:41

+0

你說得對,我必須跳過那部分。 – 2013-02-28 05:33:27

2

你永遠不希望使用Cookie來存儲用戶數據,而不是使用$ _SESSION並使其持續較長的用戶驗證碼:

session_set_cookie_params ((14 * 24 * 60 * 60), '/', '.yoursite.com'); 
//Set the session for 14 days, on all paths, on all subdomains of yoursite.com 

這將拖垮一個瀏覽器關閉,並繼續下一個會話它打開的時間。

例如,在login.php中,你可以有這樣的:

if ($remembermechecked) { 
session_set_cookie_params ((14 * 24 * 60 * 60), '/', '.yoursite.com');} 

當$ remembermechecked是真的,會議將持續14天。

+0

但這並不意味着我必須'僞造'用戶登錄以防止會話超時,因爲會話的cookie不會在後續請求中以這種方式擴展它的生命週期? – 2013-02-28 05:22:45

+0

不,實際上現在你通過使用cookie來僞造用戶登錄。 $ _SESSION是跟蹤用戶登錄的正確方法。基本上,$ _SESSION ['userid']將是註銷用戶的身份標識,在註銷時幾乎只是垃圾會話,然後他們被註銷。 – Pachonk 2013-02-28 05:27:53

+0

好的,謝謝澄清。我希望你不要介意,但是既然你和安德魯都給出了同樣的答案,並且由於你有更多的名聲,我將接受安德魯的答案作爲正確的答案。 – 2013-02-28 05:31:09

相關問題