【问题标题】:php node.js redis session share Authenticationphp node.js redis会话共享身份验证
【发布时间】:2016-01-22 17:54:44
【问题描述】:

我只使用 php 和 node.js,搜索后我找到了唯一的用户身份验证方式

所以我首先将我的 php 会话保存浴更改为 redis

这是我的插入会话代码

session_name("userID");

session_start();

$_SESSION["用户名"] = "你好世界";

这是 redis 的图像及其显示会话

这是我的浏览器 cookie

我只想在 node.js 上验证会话,所以如果用户登录 php ... node.js 向用户发送数据 else 拒绝用户 ... 或通过 node.js 从 mysql 发送数据

所以我在这里构建 node.js 服务器

一切都很好,我需要客户端上的套接字并将数据发送到服务器..

每次用户通过套接字发送值时,如果用户登录 php(在 redis 中找到会话),我想对用户进行身份验证,向其他用户发送数据...发送你必须先登录

关于如何通过node.js检查redis中的会话的问题

【问题讨论】:

    标签: javascript php node.js session redis


    【解决方案1】:

    您需要查询您的 redis 数据库以获取会话信息,如下所示

    //user.js
    

    在redis的appsession hash map中添加用户及其会话

    exports.addUserSession = function (redisClient,userId,sessionId,callback){
    
          redisClient.hset('appsession',sessionId,userId,function(err,response){
               callback(err,response);
          });
    };
    
    
    exports.validateUserSession = function (redisClient,userId,sessionId,callback){
        redisClient.hget('appsession',sessionId,function(err,response){
                if(response==userId)
                {
                    callback(err,true);
                }
                else
                {
                    callback(err,false);
                }
        });
    };
    

    然后您可以在代码中使用相同的方法来检查用户会话是否可用。例如

    var session = require(./user.js );
    socket.on("selector", function( data) { 
            sessionID = data.handshake.session;
            USERNAME = socket.username;
            session.validateUserSession(redisClient,USERNAME,sessionID,function(err,response){
                // Do other processing if session is valiated
           }
    });
    

    希望对你有帮助。

    【讨论】:

    • sessionID = data.handshake.session; TypeError:无法读取未定义的属性“会话”
    • 您在代码中使用了 data.handshake.session。您需要检查存储会话中的会话 ID。一个你得到 sessionId 你可以使用给定的代码。
    • 它给我这个客户端错误 socket.emit("selector", "give me some data");在服务器上 io.sockets.on('connection', function (socket) { socket.on("selector", function(data) { sessionID = data.handshake.session; USERNAME = socket.username; session.validateUserSession(redisClient) ,USERNAME,sessionID,function(err,response){ // 如果会话被验证,则做其他处理 }); }); }); sessionID = data.handshake.session;类型错误:无法读取未定义的属性“会话”-
    • console.log(data);给我一些数据 == 我发送到服务器的消息
    • 那么你需要先建立socket连接。你需要检查你的代码。我已经为您提供了如何在 redis 会话中存储数据以及如何在 redis 中检查会话详细信息的说明。你需要为此做一些研发,虽然我可以给你代码
    猜你喜欢
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 2016-06-04
    • 1970-01-01
    • 2021-06-28
    • 2014-09-06
    • 2023-03-14
    相关资源
    最近更新 更多