【发布时间】:2018-10-12 17:27:25
【问题描述】:
**我看过一些关于这个问题的帖子,或者这个问题的风格,但是很久以前就有人问过他们,我想得到一个更新的答案,这也可能对其他人有所帮助
我一直在使用 PHP 开发一个简单的网站(用于学习),带有注册和登录系统。现在有些页面只有登录用户才能访问。 在 PHP 中,我只需启动一个会话,在用户登录时为其提供唯一的 session_id,如果该页面仅供登录用户查看,我只需检查会话是否已设置,并获取会话内容, 这将用于从数据库中获取用户详细信息(姓名、生日等)
现在我想添加实时聊天功能,使用带有 Node.js 的 socket.io。
所以我需要只允许登录用户访问,并获取他们的会话 id,以便我可以从数据库中获取他们的名字来显示。
这是迄今为止的基本工作聊天,适用于登陆localhost:3000的任何人:(包含2个文件:index.html和index.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>
我需要做什么?
谢谢
【问题讨论】:
-
“登录用户”是什么意思?为什么不检查该条件并包装调用以在该条件下初始化聊天?
-
这意味着当他们提供用户名和密码时,会话已经从数据库中获取的唯一会话开始: session_start(); $_SESSION['用户名'] = $用户名;但是我想保存聊天,所以我需要JS代码中的会话详细信息,才能将消息添加到MySQL数据库,不是吗?