如何检查用户是否已连接并获取其会话ID(会话由PHP启动)

时间:2018-05-02 14:44:14

标签: php node.js

**我已经看过几个关于这个问题的帖子,或者这个问题的风格,但很久以前他们就被问过了,我想得到一个更新的答案,这可能对其他人有帮助< / p>

我一直在使用PHP创建一个简单的网站(用于学习),具有注册和登录系统。现在只有登录用户可以访问的页面。 在PHP中,我只是启动一个会话,在用户登录时为其提供唯一的session_id,如果该页面仅由登录用户查看,我只需检查会话是否已设置,并获取会话内容,用于从数据库中获取用户详细信息(姓名,生日等)

现在我想添加实时聊天功能,使用socket.io和Node.js. 所以我需要只允许登录用户访问,并获取他们的会话ID,以便我可以从数据库中获取他们的名字来显示。 这是迄今为止的基本工作聊天,适用于任何登陆localhost:3000的人:(包含2个文件:index.htmlindex.js

修改

这是我在PHP中用来登录用户的内容:

session_start();
$_SESSION['username'] = $username;

并检查他们是否已登录:

if (!isset($_SESSION['username'])) { //do stuff

我希望保存聊天内容(如Facebook或WhatsApp聊天),因此我需要nodeJS可以访问会话以将聊天内容插入数据库,还可以从数据库中获取以前的内容, ?或者我只能通过PHP来做到这一点?

----结束编辑----

index.js:

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res){
  res.sendFile(__dirname + '/index.html');
});

io.on('connection', function(socket){
  console.log('a user connected');
    socket.on('chat message', function(msg){
    io.emit('chat message', msg);
    });
  socket.on('disconnect', function(){
    console.log('user disconnected');   
  });
});

http.listen(3000, function(){
  console.log('listening on *:3000');
});

index.html:

<!doctype html>
<html>
  <head>    
    <script src="socket.io/socket.io.js"></script>
    <script
        src="https://code.jquery.com/jquery-3.3.1.min.js"
        integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
        crossorigin="anonymous"></script>
    <script>
    $(function () {
        var socket = io();
        $('form').submit(function(){
        socket.emit('chat message', $('#m').val());
        $('#m').val('');
        return false;
    });
    socket.on('chat message', function(msg){
        $('#messages').append($('<li>').text(msg));
    });
  });
</script>

    <title>Socket.IO chat</title>
    <style>
      * { margin: 0; padding: 0; box-sizing: border-box; }
      body { font: 13px Helvetica, Arial; }
      form { background: #000; padding: 3px; position: fixed; bottom: 0; width: 100%; }
      form input { border: 0; padding: 10px; width: 90%; margin-right: .5%; }
      form button { width: 9%; background: rgb(130, 224, 255); border: none; padding: 10px; }
      #messages { list-style-type: none; margin: 0; padding: 0; }
      #messages li { padding: 5px 10px; }
      #messages li:nth-child(odd) { background: #eee; }
    </style>

  </head>
  <body>

    <ul id="messages"></ul>
    <form action="">
      <input id="m" autocomplete="off" /><button>Send</button>
    </form>
  </body>
</html>

我需要做什么?

由于

1 个答案:

答案 0 :(得分:0)

您可以使用chatmessage发送用户名。 例如,您的聊天消息包含“Hello world”,用户“John Doe”发送了它。 然后您可以发送这样的对象而不是仅发送消息:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "OderCell", for: indexPath)

        // configure your cell

        // IMPORTANT: set the cell's delegate to this VC
        cell.delegate = self.

        return cell
}

到你的聊天应用程序。

另一方面,您解码此JSON对象,只显示名称和消息。

在您的情况下,这将意味着替换以下内容:

{ "name": "John Doe", "message": "Hello World" }

socket.emit('chat message', $('#m').val());

并且

socket.emit('chat message', {name: "John Doe", message: $('#m').val()});

使用

$('#messages').append($('<li>').text(msg));