Thinkphp 3.2 nginx負載均衡下把session寫入memcache和mysql中。

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';//數據表名稱

 

完成之後運行項目。

去查一下表有東西就搞定了。

就是這麼簡單。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章