[英]Using PHP session between apache and websocket server
我正在使用來自https://github.com/Flynsarmy/PHPWebSocket-Chat的 websocket代碼
我已經有了Mysql的自定義用戶帳戶,該帳戶的用戶通過login.php登錄到websocket。 因此,我為特定用戶設置了會話/ cookie。 舉個例子
$_SESSION["user"] = 'xyz';//User is created.
問題是,即使我使用session_id()嘗試使用$ _SESSION 。 我未能獲得$ _SESSION值。 我正在server.php中執行此操作,而該服務器應該與php server.php命令一起運行。 我在下面嘗試代碼。
session_id("lsjdfjl');
@session_start();
$user = $_SESSION["user"];
而且我收到錯誤消息說未定義索引...
有沒有其他方法可以將上述Websocket服務器與自定義用戶數據庫結合起來,並為不同的登錄用戶創建單獨的聊天室。 例如FB聊天/ Gmail聊天系統。
接受的答案不是很准確。
您可以使用相同的會話數據-參見此處:
https://stackoverflow.com/a/49802049/1274820
我也將在此處張貼代碼和圖像以供后代使用,並避免鏈接腐爛:
var cookie = require('cookie');
var fs = require('fs');
var phpUnserialize = require('php-unserialize');
//This should point to your php session directory.
//My php.ini says session.save_path = "${US_ROOTF}/tmp"
var SESS_PATH = "C:/SomeDirectory/WhereYourPHPIs/tmp/";
io.on('connection', function(socket) {
//I just check if cookies are a string - may be better method
if(typeof socket.handshake.headers.cookie === "string") {
var sid = cookie.parse(socket.handshake.headers.cookie);
if(typeof sid.PHPSESSID === "undefined") {
console.log("Undefined PHPSESSID");
}
else {
console.log("PHP Session ID: " + sid.PHPSESSID);
fs.readFile(SESS_PATH + "sess_" + sid.PHPSESSID, 'utf-8', function(err,data) {
if(!err) {
console.log("Session Data:");
var sd = phpUnserialize.unserializeSession(data);
console.log(sd);
}
else {
console.log(err);
}
});
}
}
}
結果:
您不能使用同一會話。
您根本無法將會話用於websocket連接。
Websocket連接是一個單獨的連接,位於不同的端口上,因此您的主會話在那里不可用。
您需要閱讀有關基於令牌的Websocket身份驗證的信息。 這是一些從https://auth0.com/blog/2014/01/15/auth-with-socket-io/開始的信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.