当前位置: 首页 > 面试题库 >

在php和node之间共享会话

章增
2023-03-14
问题内容

是否有使用节点,表达和redis / predis共享PHPSESSID的最新指南(或示例代码)?

我发现有1-2年的一些教程,它们都使用旧版本的Express或不使用Express。

Express cookie解析器也已弃用。

https://simplapi.wordpress.com/2012/04/13/php-and-node-js-session-share-
redi/

NodeJS + ExpressJS +RedisStore会话未定义

如果有人可以发布一些最新的代码,那就太好了……

编辑-到目前为止的节点服务器代码摘录:

var express = require('express'),
app = express(),
server = require('http').createServer(app),
io = require('socket.io').listen(server),
redis   = require('redis'),
client  = redis.createClient();

var session = require('express-session'),
RedisStore = require('connect-redis')(session);

app.get('/', function(req, res) {
    res.sendfile('/');
});

app.use(
    session({
            name: 'PHPSESSID'
    store: new RedisStore({
        prefix: 'PHPSESSID',
        port: 6379
    })
})
);

io.sockets.on('connection', function (socket) {

    app.use(function(req, res, next) {
        console.log(req.session);
    });

    .......

包装方式:

├─┬ connect@2.17.1
│ ├── basic-auth-connect@1.0.0
│ ├─┬ body-parser@1.2.0
│ │ └─┬ raw-body@1.1.4
│ │   └── bytes@0.3.0
│ ├── bytes@1.0.0
│ ├─┬ compression@1.0.2
│ │ ├── bytes@0.3.0
│ │ ├── compressible@1.0.1
│ │ └── negotiator@0.4.3
│ ├── connect-timeout@1.1.0
│ ├── cookie@0.1.2
│ ├── cookie-parser@1.1.0
│ ├── cookie-signature@1.0.3
│ ├─┬ csurf@1.2.0
│ │ ├── scmp@0.0.3
│ │ └── uid2@0.0.3
│ ├── debug@0.8.1
│ ├── errorhandler@1.0.1
│ ├─┬ express-session@1.2.0
│ │ ├── buffer-crc32@0.2.1
│ │ ├── uid2@0.0.3
│ │ └── utils-merge@1.0.0
│ ├── fresh@0.2.2
│ ├─┬ method-override@1.0.1
│ │ └── methods@1.0.0
│ ├── morgan@1.1.1
│ ├─┬ multiparty@2.2.0
│ │ ├─┬ readable-stream@1.1.13-1
│ │ │ ├── core-util-is@1.0.1
│ │ │ ├── inherits@2.0.1
│ │ │ ├── isarray@0.0.1
│ │ │ └── string_decoder@0.10.25-1
│ │ └── stream-counter@0.2.0
│ ├── on-headers@0.0.0
│ ├── parseurl@1.0.1
│ ├── pause@0.0.1
│ ├── qs@0.6.6
│ ├── response-time@1.0.0
│ ├── serve-favicon@2.0.0
│ ├─┬ serve-index@1.0.3
│ │ ├── batch@0.5.0
│ │ └── negotiator@0.4.3
│ ├─┬ serve-static@1.1.0
│ │ └─┬ send@0.3.0
│ │   ├── buffer-crc32@0.2.1
│ │   ├── debug@0.8.0
│ │   ├── mime@1.2.11
│ │   └── range-parser@1.0.0
│ ├─┬ type-is@1.2.0
│ │ └── mime@1.2.11
│ └── vhost@1.0.0
├─┬ connect-redis@2.0.0
│ └── debug@0.8.1
├─┬ express@4.1.1
│ ├─┬ accepts@1.0.1
│ │ ├── mime@1.2.11
│ │ └── negotiator@0.4.3
│ ├── buffer-crc32@0.2.1
│ ├── cookie@0.1.2
│ ├── cookie-signature@1.0.3
│ ├── debug@0.8.1
│ ├── escape-html@1.0.1
│ ├── fresh@0.2.2
│ ├── merge-descriptors@0.0.2
│ ├── methods@0.1.0
│ ├── parseurl@1.0.1
│ ├── path-to-regexp@0.1.2
│ ├── qs@0.6.6
│ ├── range-parser@1.0.0
│ ├─┬ send@0.3.0
│ │ ├── debug@0.8.0
│ │ └── mime@1.2.11
│ ├── serve-static@1.1.0
│ ├─┬ type-is@1.1.0
│ │ └── mime@1.2.11
│ └── utils-merge@1.0.0
├─┬ express-session@1.2.0
│ ├── buffer-crc32@0.2.1
│ ├── cookie@0.1.2
│ ├── cookie-signature@1.0.3
│ ├── debug@0.8.1
│ ├── on-headers@0.0.0
│ ├── uid2@0.0.3
│ └── utils-merge@1.0.0
├─┬ mysql@2.2.0
│ ├── bignumber.js@1.3.0
│ ├─┬ readable-stream@1.1.13-1
│ │ ├── core-util-is@1.0.1
│ │ ├── inherits@2.0.1
│ │ ├── isarray@0.0.1
│ │ └── string_decoder@0.10.25-1
│ └── require-all@0.0.8
├── redis@0.10.2
└─┬ socket.io@0.9.16
  ├── base64id@0.1.0
  ├── policyfile@0.0.4
  ├── redis@0.7.3
  └─┬ socket.io-client@0.9.16
    ├─┬ active-x-obfuscator@0.0.1
    │ └── zeparser@0.0.5
    ├── uglify-js@1.2.5
    ├─┬ ws@0.4.31
    │ ├── commander@0.6.1
    │ ├── nan@0.3.2
    │ ├── options@0.0.5
    │ └── tinycolor@0.0.1
    └── xmlhttprequest@1.4.2

问题答案:

对于节点(和Express 4.x):

从express-session的示例开始,但改用connect-
redis
作为会话存储。

示例代码:

var express = require('express'),
    app = express(),
    cookieParser = require('cookie-parser'),
    session = require('express-session'),
    RedisStore = require('connect-redis')(session);

app.use(express.static(__dirname + '/public'));
app.use(function(req, res, next) {
  if (req.url.indexOf('favicon') > -1)
    return res.send(404);
  next();
});
app.use(cookieParser());
app.use(session({
  store: new RedisStore({
    // this is the default prefix used by redis-session-php
    prefix: 'session:php:'
  }),
  // use the default PHP session cookie name
  name: 'PHPSESSID',
  secret: 'node.js rules'
}));
app.use(function(req, res, next) {
  req.session.nodejs = 'Hello from node.js!';
  res.send(JSON.stringify(req.session, null, '  '));
});

app.listen(8080);

对于PHP:

使用redis会话处理程序,例如redis-session-php。

示例代码:

<?php

// from https://github.com/TheDeveloper/redis-session-php
require('redis-session-php/redis-session.php');
RedisSession::start();

$_SESSION["php"] = "Hello from PHP";

// `cookie` is needed by express-session to store information
// about the session cookie
if (!isset($_SESSION["cookie"]))
  $_SESSION["cookie"] = array();

var_dump($_SESSION);

?>

注意:请确保使用相同的prefix(connect-redis)/ REDIS_SESSION_PREFIX(redis-session-
php)(默认情况下,connect-redis使用’sess:’,redis-session-
php使用’session:php:’)和ttl(connect- redis)/
session.gc_maxlifetime(PHP)(如果使用redis数据库而不是默认数据库,则为同一数据库),用于redis-session-php和connect-redis。



 类似资料:
  • 问题内容: 我想在一个应用程序和一个使用的应用程序之间共享服务器会话。我从这个要点中提取了大部分代码。 NodeJs代码: 它输出: PHP代码(我使用redis-session-php和Predis): 它输出: 问题: 我希望两个会话看起来都一样,但是却不一样(应用程序在同一域上运行)。使用from 作品设置值(但这些值不会在会话变量上)。我使用和找到了我认为可以工作的代码,但我认为这会使代码

  • 问题内容: 我的公司接管了一些旧的php应用程序。由于我们偏爱ASP.net且由于以前的开发人员缺少任何文档,因此我们不想在PHP开发上花费大量资源。为了实现新功能,我们将创建一个Asp.net应用程序,其外观与用户相同。我们要开发一种“共存”的Web应用程序。因此,我们必须在PHP和Asp.net Web应用程序项目之间共享会话,因为现有的MySQL数据库涉及用户管理。 (例如,链接“ A”指向

  • 在运行之后,在JS中提交表单。 如何防止提交表单后刷新页面? 如何将数组传递回JS? 代码更新:

  • 我正在做一个phonegap应用程序,我不能在index.html和inappbrowser窗口之间共享数据。我尝试了这段代码,但它对我不起作用。 我还尝试使用localStorage,但只将inappbrowser的数据共享到index.js,而不是将index.js的数据共享到inappbrowser。

  • 我有两个问题。我理解,如果我在cookie中指定域为(带前导点),那么所有子域都可以共享一个cookie。 是否可以访问在中创建的cookie(没有子域)? 如果在中创建,(没有子域)是否可以访问cookie?

  • 问题内容: 有没有办法在Netbeans和Eclipse之间共享相同的* .java文件? 问题答案: 您可以将eclipse项目导入netbeans, 或者,您可以从现有资源创建Eclipse项目。