2011-10-28 93 views
0

我正在使用CakePHP(1.3版)和Auth組件。現在所有的cookie都不在HTTP和HTTPS之間的snyc中。Cookie與HTTP和HTTPS網站部分之間不同步

例如,用戶可以通過HTTP進行登錄,而不是通過HTTPS登錄,甚至更糟的用戶A可以通過HTTP進行登錄,並且用戶B可以通過HTTPS登錄。

這是發生了其他事情,以及(如在車中的項目)

我不知道是怎麼回事,或者如何解決它。

我需要做什麼以使它們在HTTP和HTTPS上具有相同的cookie?

+0

這很可能是由於設計原因,通常HTTP或HTTPS發送的請求可能會呈現不同的網站內容。 –

回答

0

這可能是由安全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。

+0

我已經這樣做了,但對於我的beforeRender()中的所有用戶頁面(如果頁面是http,它將重定向到https)。所以我不知道該怎麼做。 –

+0

嘗試在接受的答案中執行以下操作:http:// stackoverflow。com/questions/308659/session-not-saving-when-from-ssl-to-non-ssl – Petr

+0

感謝您指點我。我試着確認它修復了這個問題。 :) –

0

修改核心代碼大部分時間都是壞事,在你的情況下,有可能做你需要的,但蛋糕的方式。

在應用程序/配置/ 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的部分僅需要會話以獲得更流暢的導航。

+0

他們能夠在http上看到他們的https cookie嗎?例如,我不想通過http向他們顯示他們的個人資料信息,但是如果他們已經登錄,那麼我不想在http上顯示「登錄」鏈接,而是顯示「我的帳戶」鏈接。 –

+0

沒有。安全cookie永遠不會發送到http url以防止其不安全傳輸。要做你想做的事情,你可以在成功登錄後將用戶重定向到一個特殊的http頁面,該頁面只對設置一個http會話變量來指示用戶已登錄有用。並且使用相同的想法在用戶註銷。但我不確定瀏覽器是否會抱怨,如果它從https到http重定向的位置標題。 – nIcO

相關問題