重新設置了WEB服務器之后,發現一些賬號無法登陸
服務器是用 apt 方式安裝的 Apache2 + php-fpm
1. 之前懷疑是 302 重定向到問題,但是 a2enmod/a2dismod rewrite 之后,均無法解決此問題。
2. 用chrome登陸一個文件管理器,由於單個文件好調試,F12之后,
3. F12之后,發現全是英文,經過一番摸索,終於設置到了 中文。
4. 偶爾發現響應頭中有個黃色的三角符號,吃驚之余看到
set-cookie:;HttpOnly;Secure
這不就是 mod_headers模塊的問題嗎?可能是Apache2版本的問題,導致之前虛擬機中設置的header在當前版本中存在語法問題。
到這里問題是找到了,先了解一下 Cookie安全相關屬性
HttpOnly :將HttpOnly 設置為true ,通過程序(JS腳本、Applet等)將無法讀取到Cookie信息,防止程序獲取cookie后進行攻擊。
Secure :設置了Secure (沒有值),則只有當使用https協議連接時cookie才可以被頁面訪問,防止信息在傳遞的過程中被監聽捕獲后信息泄漏。
打開虛擬機相關的配置文件,看到一行
Header edit Set-Cookie ^(.*)$ ;HttpOnly;Secure
看起來沒問題,谷歌搜索之后,發現還是有語法問題,少了紅色的 $1 ,可能是Apache設置引起的差異。
Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
5. 給 Header edit Set-Cookie ^(.*)$ ;HttpOnly;Secure 增加了 $1 問題解決,
程序的問題就是這個神奇,程序員為什么會猝死,為什么是吃青春飯的,由此可得到答案,實在比在放大鏡下面看蚊子的牛牛還艱辛。
遠離IT,則人生幸福
6. 這問題在PHP、nginx也可以處理。
PHP
php.ini 文件開啟以下兩行,默認大概位於 1390左右 session.cookie_httponly=true session.cookie_secure = 或者在 php 代碼中使用 ini_set 函數設置 @ini_set('session.cookie_httponly', 'On'); @ini_set('session.cookie_secure', 'On'); @ini_set('session.use_only_cookies', 'On');
Nginx
Nginx.conf 文件中設置 http{ } 或 server{ } add_header Set-Cookie "HttpOnly"; add_header Set-Cookie "Secure";
到此,問題已經基本處理完畢,在此做個記錄,以裨益網友