今天去面試,被問到瀏覽器禁止了Cookie後,Session還能繼續使用嗎?當時很自信的說固然不能用了,把以前瞭解到的信息負複述了一邊,面試官非常無奈,很顯然失敗的面試,回來後找了度娘,果不其然,之後面試的每一個問題都須要認真對待啊。php
原文摘自:php一點通html
關於PHP中瀏覽器禁止Cookie後,Session能使用嗎?咱們來作些測試,而後說明原理。
我創建兩個文件session_test.php和session_a.php內容分別是:面試
<?php session_start(); $_SESSION['url'] = 'http://www.phpddt.com'; echo '這個頁面取到的session值:'.$_SESSION['url']; echo "<a href='session_a.php'>另外一個頁面</a>";
<?php session_start(); echo "看這裏是否獲取到session的值:".$_SESSION['url'];
運行session_test.php結果:
點擊另外一個頁面,默認固然是能夠獲取的,可是當我禁止cookie後呢?看看session_a.php結果:
PHP中的session在默認狀況下是使用客戶端的Cookie來保存session id的,因此當客戶端的cookie出現問題的時候就會影響session了。可是Session並不徹底依賴Cookie,它還能夠經過URL Get傳遞session id的。這須要你將php.ini中session.use_trans_sid = 1,這表示容許SessionID經過URL明文傳輸,既然GET能夠,那麼POST傳遞session id我以爲也能夠吧。
好,這樣,把上面session_test.php和session_a.php改造下就可使用sesson了:
瀏覽器
<?php session_start(); $_SESSION['url'] = 'http://my.oschina.net/u/585327/blog/515341'; echo '這個頁面取到的session值:'.$_SESSION['url']; ?> <a href="session_a.php?<?php print session_name() ?>=<?php print session_id() ?>">另外一個頁面</a>
<?php session_id($_GET['PHPSESSID']); session_start(); echo "看這裏是否獲取到session的值:".$_SESSION['url'];
如願以償:
安全
最後說明:cookie
php.ini 中 SESSION 的配置
session.use_only_cookies = 1; // 開啓僅使用cookies存放會話id
session.use_trans_sid = 1; // 容許SessionID經過URL明文傳輸
session
在這種狀況下雖然已經容許了SessionID經過URL明文傳輸,擔是同時又開啓了僅使用cookies存放會話SessionID,因此在URL中明文傳輸的PHPSESSIONID參數值是無效的,SESSION不能用。
php.ini 中 SESSION 的配置
session.use_trans_sid = 0; // 禁止SessionID經過URL方式明文傳輸測試
SESSION 不能用, 這是最這安全的作法,也是php.ini 的默認配置url