2013-04-06 54 views
0

有沒有人知道PHPSESSID的工作原理?它如何工作以及它被保存在哪裏?它是保存在客戶端還是在服務器端,如果他知道我的PHPSESSID,另一臺PC能否通過他的PC連接到我的賬戶?如何保存PHPSESSID?

+0

我認爲這個答案會幫助你。 http://stackoverflow.com/a/1370974/2252330 – 2013-04-06 15:16:05

回答

2

是的,這就是爲什麼它是最好不要通過URL傳遞會話ID,而是改用餅乾:

的php.ini:session.use_cookies = 1

在這種情況下,有一個文件夾是在服務器(php.ini中:session.save_path)將存儲這些文件,並且在您的硬盤上還有一個cookie,用於將您的憑證映射到註冊的session_id。

的php.ini:session.cookie_lifetime

設置時間這個cookie將活(0表示無限),而

的php.ini:session.gc_maxlifetime

定義它會活多久在服務器上。

使用

的php.ini:session.cookie_httponly = 1session.cookie_secure = 1沿(如果你使用的是SSL)

,以提高你的cookies的信息,使他們都是通過JavaScript不可用的,是一個很好的最後一次機會保護在xss攻擊的情況下將降落傘發送到惡意目的地。

正如爆炸藥丸所指出的那樣,無論如何總是有一種方法可以高枕無憂。你所能做的就是讓它更難。

1

會話數據保存在服務器端的文件系統上,會話ID作爲標識符。實際位置各不相同,您可以通過ini設置更改它。您也可以更改名稱,但將其作爲cookie提供給客戶端並引用會話文件。在我的系統

/var/lib/php5/sess_53jsd3icrkbqbbfrl6qlv6e6a7 

在瀏覽時我有PHPSESSID餅乾53jsd3icrkbqbbfrl6qlv6e6a7

由於這用於識別會話,因此如果它暴露出來,則存在安全風險,因此如果用戶知道會話ID,則可以竊取會話。這被稱爲會話劫持。請注意,即使session.use_cookies = 1還不夠,因爲沒有任何東西阻止某人設置該cookie,如果他們知道的話。使用https加密cookie是我所知道的唯一有效解決方案。

+0

還有http://us.php.net/manual/en/session.customhandler.php,它可以用來代替基於文件的會話。 – DCoder 2013-04-06 15:20:37