2011-10-07 129 views
3

我試圖讓php會話cookie在PHP會話ID存儲爲安全(https)和http只。創建安全的PHP會話cookie

$name = session_name(); 
setcookie($name, $_COOKIE[$name], 0, '/', 'domain.com, 1, 1); 

我在會話開始前調用上面的代碼。問題是它創建了兩個cookie。一個安全的方式,我想要它,然後它創建一個沒有ssl或http-only的普通cookie。兩個cookie都具有相同的值。

有沒有辦法告訴PHP創建安全(ssl)和http-only會話cookie?

此外,而不是提出另一個問題。由於我們處於相同的主題......用戶可以修改$_SESSION變量嗎?我知道他們可以在他們的結尾操縱會話ID,但想知道$_SESSION是否安全存儲最終用戶無法根據他們的意願修改的用戶標識。

回答

7

PHP在您撥打session_start()時爲您創建cookie,這就是原因。

您可以使用session_set_cookie_params函數或在您的php.ini中配置該cookie。

session_set_cookie_params($lifetime = 0, $path = '/', $domain, $secure = true, $httponly = true); 

只需配置和刪除自己的setcookie調用,這是多餘的。

用戶可以在其最後修改$_SESSION變量嗎?

不,他們只能編輯cookie中的數據。這通常會導致會話丟失(或者如果他們幸運的話,會讓別人會話)。

這就是爲什麼如果用戶想要更改她/他的密碼,您需要再次詢問當前密碼。對於類似的重要事物也一樣

成功登錄或註銷後此外,change the session id

session_regenerate_id(); 

日誌奏:

session_regenerate_id(true);