我正在使用CakePHP(1.3版)和Auth組件。現在所有的cookie都不在HTTP和HTTPS之間的snyc中。Cookie與HTTP和HTTPS網站部分之間不同步
例如,用戶可以通過HTTP進行登錄,而不是通過HTTPS登錄,甚至更糟的用戶A可以通過HTTP進行登錄,並且用戶B可以通過HTTPS登錄。
這是發生了其他事情,以及(如在車中的項目)
我不知道是怎麼回事,或者如何解決它。
我需要做什麼以使它們在HTTP和HTTPS上具有相同的cookie?
我正在使用CakePHP(1.3版)和Auth組件。現在所有的cookie都不在HTTP和HTTPS之間的snyc中。Cookie與HTTP和HTTPS網站部分之間不同步
例如,用戶可以通過HTTP進行登錄,而不是通過HTTPS登錄,甚至更糟的用戶A可以通過HTTP進行登錄,並且用戶B可以通過HTTPS登錄。
這是發生了其他事情,以及(如在車中的項目)
我不知道是怎麼回事,或者如何解決它。
我需要做什麼以使它們在HTTP和HTTPS上具有相同的cookie?
這可能是由安全cookie引起的,只有在通過https訪問頁面時纔會發送。如果通過https訪問頁面,CakePHP會自動設置session.cookie_secure。
禁用此行爲,更改ini_set('session.cookie_secure', 1);
到ini_set('session.cookie_secure', 0);
內cake\libs\cake_session.php
我會建議在應用端來處理它,並允許在記錄(以及所有成員頁)只有通過https。
我已經這樣做了,但對於我的beforeRender()中的所有用戶頁面(如果頁面是http,它將重定向到https)。所以我不知道該怎麼做。 –
嘗試在接受的答案中執行以下操作:http:// stackoverflow。com/questions/308659/session-not-saving-when-from-ssl-to-non-ssl – Petr
感謝您指點我。我試着確認它修復了這個問題。 :) –
修改核心代碼大部分時間都是壞事,在你的情況下,有可能做你需要的,但蛋糕的方式。
在應用程序/配置/ core.php中:修改Session.save值
//Configure::write('Session.save', 'php');
//this will look for a 'mysession.php' file in app/config
Configure::write('Session.save', 'mysession');
在應用程序/配置:創建一個mysession.php文件,你想要的參數爲會話
ini_set('session.use_trans_sid', 0);
ini_set('session.name', Configure::read('Session.cookie'));
ini_set('session.cookie_lifetime', $this->cookieLifeTime);
ini_set('session.cookie_path', $this->path);
//overwrite Cake setting already set by CakeSession
ini_set('session.cookie_secure', 0);
另外要注意,如果你設置你的cookies進行不安全,大部分使用HTTPS的利益沒有了,因爲cookie用於HTTPS 同一會話和 HTTP,它很容易被竊取,然後竊取HTTPS的會話。
我有一個web應用程序的情況,通過HTTPS的管理部分和通過HTTP的公共部分,也需要會話。我設法通過指定兩個不同的Cookie名兩部分分開:
在app_controller.php:
if(env('HTTPS')
{
Configure::write('Session.save', Configure::read('Session.save') . '_https');
}
而在應用/ config中,創建一個名爲* mysession_https.php *另一個文件與
ini_set('session.use_trans_sid', 0);
ini_set('session.name', Configure::read('Session.cookie') . 'S');
//cookie destroyed when users close their browser
ini_set('session.cookie_lifetime', 0);
ini_set('session.cookie_path', $this->path);
ini_set('session.cookie_secure', 1);
這會創建兩個不同的會話,一個通過HTTP,另一個通過HTTPS,但在我的情況下很好,因爲所有敏感或私有數據都通過HTTPS,而通過HTTP的部分僅需要會話以獲得更流暢的導航。
他們能夠在http上看到他們的https cookie嗎?例如,我不想通過http向他們顯示他們的個人資料信息,但是如果他們已經登錄,那麼我不想在http上顯示「登錄」鏈接,而是顯示「我的帳戶」鏈接。 –
沒有。安全cookie永遠不會發送到http url以防止其不安全傳輸。要做你想做的事情,你可以在成功登錄後將用戶重定向到一個特殊的http頁面,該頁面只對設置一個http會話變量來指示用戶已登錄有用。並且使用相同的想法在用戶註銷。但我不確定瀏覽器是否會抱怨,如果它從https到http重定向的位置標題。 – nIcO
這很可能是由於設計原因,通常HTTP或HTTPS發送的請求可能會呈現不同的網站內容。 –