1.這幾天做項目服務器遷移,在過程中發現數據總是出現這樣那樣的問題。項目是剛從其他公司接受的。在正式環境也出國莫名其妙的丟失session的情況,問這個項目的研發,他說他也在找bug。
2.看了代碼邏輯,出問題的都是session作爲查詢條件的。於是就打印的session數組看。果然,同一個sessionid有時就是沒有session的其他的值,多刷幾下頁面就有了。
3.確定問題是負載均衡導致session的問題好辦了,本來想寫進redis,但是Thinkphp3.2框架裏沒有session redis的支持。不太想去從網上去拿支持。於是就考慮memcache了。
4.網上搜來搜去很多文章都是截取的,遇到了一些坑。
5.步驟:
當然先安裝memcache很簡單,請自行百度
a.在php項目入口index.php中在require之前加入函數:
ini_set("session.save_handler", "memcached"); ini_set("session.save_path", "tcp://localhost:11211");
b.配置你的config,不要說不知道配置寫哪裏:
'MEMCACHE_HOST'=>'127.0.0.1', 'MEMCACHE_PORT'=>'11211', // session配置 'SESSION_TYPE'=>'Memcache',
運行:telnet 127.0.0.1 11211
get (session_id) 自己在調試模式下看
memcache數據有值,ok搞定,簡簡單單。
6.寫進mysql:
a.一樣在index.php寫入ini_set("session.save_handler", "user");
b.在數據庫建表
CREATE TABLE 前綴_session (
session_id varchar(255) NOT NULL,
session_expire int(11) NOT NULL,
session_data blob,
UNIQUE KEY `session_id` (`session_id`)
);
//表名是前綴加session
c.在配置文件寫:
'SESSION_OPTIONS' => array(
'type'=> 'db',//session採用數據庫保存
'name' => '前綴_expire', //設置session名
'expire' => 3600 * 24 * 31, //SESSION過期時間,單位秒
'use_trans_sid' => 1, //跨頁傳遞
'use_only_cookies' => 0, //是否只開啓基於cookies的session的會話方式
),
'SESSION_TABLE'=>'前綴_session';//數據表名稱
完成之後運行項目。
去查一下表有東西就搞定了。
就是這麼簡單。