我创建了一个简单的登录功能,将以下数组存储到会话中:
$sessionData=[
'username'=>/*username of the loged in user*/,
'user_id'=>/*user id of the logedin user*/
];
我希望授权用户能够聊聊通过Codeigniter提供的以下聊天页面:
<?php
$this->load->helper('url');
?>
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Messaging</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="<?=base_url('assets/css/bootstrap/bootstrap.min.css');?>" rel="stylesheet" >
<script src="<?=base_url('assets/js/jquery.min.js')?>"></script>
<script src="<?=base_url('assets/js/bootstrap.min.js')?>"></script>
<script src="<?=base_url('assets/js/socket.io.min.js')?>"></script>
<script>
$(function () {
var socket = io('http://localhost:3000');
$('form').submit(function(e){
e.preventDefault();
socket.emit('chat message', $('#m').val());
$('#m').val('');
});
socket.on('chat message', function(msg){
$('#messages').append($('<div class="col-xs-12">').text(msg));
});
});
</script>
</head>
<body>
<div id="messages" style="max-height:100%" class="container-fluid">
</div>
<div class="container-fluid">
<div class="col-xs-12">
<form action="" class="form-inline bg-success">
<div class="form-group">
<input id="m" type="text" class="form-control" autocomplete="off" />
</div>
<button class="btn btn-primary">Send</button>
</form>
</div>
</div>
</body>
正如你所看到的,它在node.js服务器上使用socker.io监听端口3000.但是我想在socket.io服务器中加入一些身份验证,以便第三方应用程序无法使用未经授权的用户用它。
正如我所注意到的,只要websocket使用相同的域,codeigniter&#39 ;; cookie就会传递给node.js&#39; socket.io。所以我认为我需要一个中间件才能从redis获得coceigniters会话数据。
首先,我想了解数据如何存储在redis服务器上,以便通过redis-cli --scan --pattern '*'
命令连接,得到以下结果:
ci_session:uipchhk7lfc5vmodndljquqsbs2ru02d
ci_session:gvmio1esujbscbh8847olbn4hkg5897n
ci_session:iejok3chmv025keh5g52lj3lps701umj
但它们似乎没有任何有用的形式。所以我想知道:
以上这些数据是什么? 我将如何从node.js应用程序获取我想要的会话信息?
答案 0 :(得分:0)
如果您使用以下命令进行进一步检查(在您提供给控制台redis-cli
之后):
get ^one of the keys shown^
例如
get ci_session:uipchhk7lfc5vmodndljquqsbs2ru02d
您将获得会话数据。