2015-03-08 59 views
1

我試着使用活動會話(始於PHP)在node.js中工作用PHP會議(存儲在MySQL)在Node.js的

對於PHP我存儲在MySQL的會話(通過使用session_set_save_handler,如http://phpsecurity.org/code/ch08-2中所述)。適用於PHP。

現在擬:對node.js的服務器端

http://192.168.0.222:53077/?phpsession=02isg9kv8fbveqhmt1htcj6cc7 

2)得到PHPSESSID:

1)從PHP應用程序的客戶端 「執行」 的node.js與客戶的PHPSESSID的cookie中獲取鏈接,看它是在MySQL的會話表

3)如果在mysql中存在PHPSESSID值值 - 讀取用戶的ID,姓名,並存儲在MySQL(會話表中的其他用戶的數據)

問題是 - 是對的嗎?我認爲我錯了,至少從步驟2.什麼是正確的方式來工作在Node.js會話存儲在MySQL中從PHP開始?

請儘量不要建議我將會話存儲在memcached或redis中,我選擇了mysql。

+1

通過URL可以讓你的用戶特別容易受到會話劫持傳遞會話令牌(會顯示出來在服務器日誌中,可能在存儲在瀏覽器中的URL上等)。相反,我會將HTTP標頭添加到請求中。 – mesch 2015-03-08 18:29:28

+0

我預料到了。有人會問,但你已經回答了。你建議我不要使用GET?或者 - 使用GET,但發送HTTP標頭而不是cookie標識?你能寫一點樣品嗎?不管怎麼說,還是要謝謝你。 – deeplay 2015-03-08 18:39:32

回答

2

由於您使用session_set_save_handler自己處理會話,因此您可以選擇以任何您想要的方式序列化數據。我會建議json_encode()與nodejs兼容。

PHP爲您的保存處理程序提供了已經序列化的數據作爲字符串,因此您需要反序列化()並使用json_encode重新序列化。在返回到PHP之前,將會話blob讀數調整爲json_decode()和serialize()。

你的步驟1,2和3似乎是正確的。更詳細的問題可以提供更好的答案。

我會建議確保您的SQL表作爲會話存儲的幾列。

  • 「created_on」整數時間戳
  • 「updated_on」整數時間戳
  • 「long_term」小整型,如果用戶選中「記住我」或類似的東西 ,這應該跳過正常的會話垃圾收集
  • 「ip_addr」可用於提醒用戶潛在的會話劫持。
  • 「代理」可以是md5或用戶代理來檢測來自 不同的設備訪問的SHA1總和/瀏覽器
+0

謝謝你的回答。關於json的問題:你的意思是這樣的: 1.在php:'json_encode()'中存儲json格式的會話數據; 2.在node.js中:'json_decode()'用於讀取json格式的會話數據。 我不能得到一個主要的東西:我需要將節點的會話技術與存儲在mysql(會話表)中的數據綁定嗎?或者我只是讀取存儲在MySQL數據並在node.js中使用它? 我是否需要在node.js中使用「goran」(在[link]中找到它(http://stackoverflow.com/questions/26331228/how-can-i-parse-php-user-details -session-to-node-js-server))? – deeplay 2015-03-08 18:30:57

+0

你可能會想到整個問題。當需要從Node中的會話訪問數據時,請確保Node有權訪問PHP生成的會話ID,然後讀取該表。 唯一的問題是,PHP的默認序列化可能無法被Node解析,所以在寫入數據庫時​​使用PHP中的json_encode/decode。 – chugadie 2015-03-09 12:49:10

+0

Thx,現在對我來說很清楚! – deeplay 2015-03-10 21:29:56