`

express处理多域名环境下的session

 
阅读更多

微站子系统上线以后,我们有2个域名,分别是www和wx。测试发现,当页面交替请求这2个域名下的资源和服务时,会造成session反复切换,于是依赖session的一些方案都失效了

最后定位到,是因为我们错误地使用express session造成的

express的session中间件的原理是,对于配置了使用session middleware的path,大致上有以下的流程:

1、看request是否携带了sid的cookie

2、如果没有sid,则在服务端(内存,redis,mongodb)创建一个session,并分配一个sid在响应中给客户端,下次客户端就会带着这个sid cookie上来

3、如果有sid,但是在服务端找不到对应的session,那么也创建一个,并重新分配sid

4、如果有sid,并且能找到对应的session,则把session中储存的值取出来,放在req.session对象上

因此,在多域名的环境下,要保证session机制正确,需要注意以下几点:

1、不同的url配置的mongodb源必须一致,既要是同一个mongodb,还要是同一个database

2、需要配置domain属性

参考配置如下:

.use("/svc", express.session({   
                store: new MongoStore({
                    url: 'mongodb://' + global['_g_topo'].dataServer.mongodb.connectionurl + '/yilos_session'
                }),
                cookie: {
                    domain: "yilos.com",
                    maxAge: maxAge
                },
                secret: secret
            }))

如果使用的mongodb源不同,那么当URL切换的时候,根据sid就找不到对应的session,于是会重新创建;如果没有配置domain,那么在www和wx域名切换的时候,客户端会携带不同的cookie,也会造成express下发不同的sid,还是找不到
分享到:
评论

相关推荐

    cookieAndsession.zip

    4. **负载均衡**:在多服务器环境下,需要处理Session共享问题,如使用Session粘滞(sticky sessions)或使用分布式Session存储。 **Node.js中的Cookie和Session** 在Node.js中,我们可以使用各种库来方便地管理和...

    Nodejs 和Session 原理及实战技巧小结

    Node.js是一种基于Chrome V8引擎的JavaScript运行...以上展示了如何在Node.js环境下使用Session进行用户会话管理的原理和实战技巧。这些知识可以帮助开发者更好地理解和运用Node.js处理Web应用中的用户认证与状态保持。

    Node.js中快速开发框架 Express的登录注册小案例

    为了解决这个问题,可以使用 `cors` 模块来配置 Express 允许特定域名的请求。 4. **未登录拦截**:可以编写一个中间件检查请求中的 session 或 cookie,如果用户未登录,则重定向到登录页面。这样可以确保只有登录...

    vue+前后端的跨域问题解决b sesson不一样解决.zip

    但实际开发中,由于前后端分离,通常它们会部署在不同的域名或端口下,这就导致了跨域问题的出现。本文将深入探讨如何解决Vue.js与后端服务之间的跨域问题,以及当Session不一致时的处理策略。 首先,了解跨域的...

    HTTP无状态通信中的用户身份验证:Cookie、Session、JWT的详细解析

    另外,特别提到Express环境下设置cookie的方法,以及前端利用JavaScript实现操作cookie的具体代码示例。 适合人群:从事Web应用程序开发的专业人士;对网络安全感兴趣的读者;需要理解和选择适合项目需求的身份验证...

    nodejs 的 session 简单使用

    在Web开发中,Session...然而,实际生产环境中,通常会使用像`express-session`这样的中间件库来更高效、安全地处理Session,它们提供了更多的功能,例如Session存储(内存、文件系统、数据库等)、过期策略和加密等。

    vue2 前后端分离项目ajax跨域session问题解决方法

    在前后端分离的项目中,Vue2经常遇到的一个挑战是处理AJAX跨域请求时的Session问题。在本文中,我们将深入探讨这个问题,并提供一种解决方案。 首先,让我们理解跨域和Session的基本概念。跨域是由于浏览器的同源...

    express-login:通过cokkies登录用户

    4. **限制**:每个域名下Cookie的数量有限制,且总大小不能超过4KB。 **二、Express中的Cookie操作** 在Express中,我们可以使用`cookie-parser`中间件来处理Cookie。首先,安装`cookie-parser`: ```bash npm ...

    ZendPlatform安装图解

    在Linux环境下安装Zend Platform需要遵循一定的步骤,确保与已有的PHP环境兼容或者创建新的环境。 **安装流程** 1. **下载与准备** - 从PHPChina网站下载最新版本的Zend Platform,例如3.0.3。 - 同时下载提供的...

    cors解决跨域web实例源码(结合网上改造)

    3. **Session ID问题**:在跨域情况下,由于Cookie不会自动包含在跨域请求中,因此默认情况下,用户的身份信息(如Session ID)无法在跨域请求中传递。开发者可以通过设置`Access-Control-Allow-Credentials`为`true...

    完整的BBS,blog全套系统(高压缩)

    标签中的“动态网站开发代码”可能涵盖服务器端脚本、客户端脚本、数据交互、路由处理、模板引擎等多个方面。同时,两部分代码都强调了“全”,这意味着它们包含构建整个系统所需的全部组件,适合学习和自定义。 ...

    WindowsXP系统注册表解释.docx

    - **作用**:让IE在地址栏中完整显示网址,而不是仅显示域名部分,增加浏览的安全性和透明度。 ##### 10. 退出IE时保存历史网址内容 - **路径**:`HKEY_CURRENT_USER\Software\Microsoft\InternetExplorer\main` - ...

    赛虎网址导航

    这部分代码通常位于框架的特定目录下。 6. **配置文件**:包含系统设置,如数据库连接信息、应用程序路径、错误处理等,这些信息对运行和维护网站至关重要。 7. **第三方库和API**:为了实现特定功能,赛虎网址...

    wafer-quickstart nodejs

    【描述】中提到的"wafer 小程序 quickstart nodejs master 示例代码"是指该项目提供了详细的示例代码,这些代码展示了如何在 Node.js 环境下设置和运行一个与微信小程序交互的应用。"开发技术"部分则意味着这个项目...

    ASP.NET零基础开发

    配置IIS包括安装、设置网站、分配端口、绑定域名以及处理应用程序池等步骤。对于初学者来说,理解这些基本配置是至关重要的,因为它们为后续的开发和部署奠定了基础。 实际项目开发通常涉及到以下几个关键步骤: 1...

    2021-2022计算机二级等级考试试题及答案No.19179.docx

    【计算机二级等级考试知识点...这些知识点涵盖了计算机二级等级考试中的基础操作、编程语言特性、数据库操作、网络知识、操作系统使用、编程环境以及图形用户界面设计等多个方面,是备考计算机二级等级考试的重要内容。

    图书管管理系统

    5. 部署上线:选择合适的服务器环境,配置域名,部署应用程序。 6. 维护更新:定期检查系统运行状况,根据用户反馈进行功能迭代和优化。 五、未来趋势 随着云计算、大数据和人工智能的发展,图书管理管理系统将...

    JavaWeb培训讲义8

    基于POP3协议的E-mail系统允许用户通过E-mail客户端软件(如Foxmail、Outlook Express等)经过相应的参数设置后(主要是设置POP3邮件服务器的IP地址或域名、用户账号及其对应的密码)接收邮件。用户可以选择将所有...

    Web开发课程设计案例-社交媒体平台模拟.rar

    7. 用户认证与授权:实现用户登录、注册、会话管理等功能,理解JWT(JSON Web Tokens)或Cookie session的机制,确保只有经过验证的用户才能访问特定资源。 8. 测试与调试:编写单元测试和集成测试,确保代码质量。...

    ---简单的网上售书--

    2. **后端开发**:后端处理数据逻辑和业务流程,常用的语言有Python(如Django或Flask框架)、Java(Spring Boot)或Node.js(Express框架)。开发者需要理解RESTful API设计,用于前端与后端的通信。 3. **数据库...

Global site tag (gtag.js) - Google Analytics