was服务无法保持会话

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了was服务无法保持会话相关的知识,希望对你有一定的参考价值。

was服务无法保持会话
部署到一台已有的was服务器上。登录时被拦截器拦截,不断报session超时,重定向到登录首页。

在tomcat及新建的was服务器下安装,都可以正常运行。

根据这个思路,打印日志,已有的was服务器显示为每次请求都新建了session,导致会话不能够保持住。

排查was配置,发现在was设置里,已经设置了cookie的path路径为 /imanager 。而我的应用上下文为mpay-manage。客户端浏览器的会话通过cookie来记录,登录时候因读取不到cookie导致session为空,服务器认为是新的请求,故而新建session。从使用者角度来看,就是页面不断跳转到登录页面,无法正常登录进应用系统。

所以,针对以上情况,当时的处理方式是将was服务器的cookie的 路径path设置为 /。重新启动was服务器实例。登录运行成功。

故此,特针对cookie重新学习下。

---------------------------------以下摘自互联网-----------------------------------------

Cookie 概述
Cookie是什么? Cookie 是一小段文本信息,伴随着用户请求和页面在 Web 服务器和浏览器之间传递。Cookie 包含每次用户访问站点时 Web 应用程序都可以读取的信息。

为什么需要Cookie? 因为HTTP协议是无状态的,对于一个浏览器发出的多次请求,WEB服务器无法区分 是不是来源于同一个浏览器。所以,需要额外的数据用于维护会话。 Cookie 正是这样的一段随HTTP请求一起被传递的额外数据。

Cookie能做什么? Cookie只是一段文本,所以它只能保存字符串。而且浏览器对它有大小限制以及 它会随着每次请求被发送到服务器,所以应该保证它不要太大。 Cookie的内容也是明文保存的,有些浏览器提供界面修改,所以, 不适合保存重要的或者涉及隐私的内容。

Cookie 的限制。 大多数浏览器支持最大为 4096 字节的 Cookie。由于这限制了 Cookie 的大小,最好用 Cookie 来存储少量数据,或者存储用户 ID 之类的标识符。用户 ID 随后便可用于标识用户,以及从数据库或其他数据源中读取用户信息。 浏览器还限制站点可以在用户计算机上存储的 Cookie 的数量。大多数浏览器只允许每个站点存储 20 个 Cookie;如果试图存储更多 Cookie,则最旧的 Cookie 便会被丢弃。有些浏览器还会对它们将接受的来自所有站点的 Cookie 总数作出绝对限制,通常为 300 个。

通过前面的内容,我们了解到Cookie是用于维持服务端会话状态的,通常由服务端写入,在后续请求中,供服务端读取。
参考技术A was服务无法保持会话,每次都需要重新输入用户名和密码。

解决方法:

1. 在登录时勾选“记住我”选项。

2. 在浏览器中启用cookie,这样服务器就可以记住用户的状态。

3. 使用持久会话,即在登录时生成一个会话ID,并将其存储在客户端(浏览器)中,以便服务器可以在用户每次请求时识别客户端。

4. 在服务器上实现单点登录(SSO),用户只需登录一次就可以访问所有相关服务。
参考技术B 无法保持绘画状态,一般都是由于2点原因导致,第一是网络故障问题,如果网络一直存在网络波动,那么无法保持正常的长时时间的会话。第二就是终端的储存问题,如果终端的虚拟内存过低,也无法保持会话的长时间储存状态。 参考技术C 错误提示:“could not connect to peer” “由于各种原因,可能会无法连接到对方节点。” 最常见的一种情况是,地址簿中存在一个之前会话的节点标识符。

Node.js localhost 服务器无法与我的 php localhost 保持会话

【中文标题】Node.js localhost 服务器无法与我的 php localhost 保持会话【英文标题】:Node.js localhost server cant mentain session with my php localhost 【发布时间】:2021-12-31 03:35:39 【问题描述】:

我的 ReactJS 网站在“localhost:3000”上运行“npm start”。我在“localhost”上有我的 XAMPP PHP 服务器,我的 api 用于后端。我与我的 php 服务器的“获取”功能进行通信,我发现一个问题 - 每次我发出请求时,我都会看到创建了新会话 - 我无法维护任何会话信息,如登录等。

如果我构建我的应用程序并将其放在 XAMPP 服务器上 - 一切正常,React 网站正常工作,会话仍然存在,但不在这两个 localhost 之间,不在我的开发阶段。

谁能告诉我我做错了什么?我不想在每次想检查它是否有效时都建立我的网站,也不想切换到任何其他后端技术。

谢谢

【问题讨论】:

这可能是 CORS 问题:我相信不同的端口被认为是不同的来源,因此您的会话状态(cookie?)不会被共享。最简单的解决方案可能是为您的 localhost:3000 设置 reverse proxy in apache。这样一来,一切都在同一个端口上。 【参考方案1】:

我假设您使用的是“Webpack”。为了在开发模式下规避这个问题 - 你可以使用 Webpack 的Proxy 功能。

当您有一个单独的 API 后端开发服务器并且您希望在同一个域上发送 API 请求时,代理某些 URL 会很有用。

最低配置很简单(假设后端在 80 端口):

"proxy": "http://localhost:80/",

【讨论】:

以上是关于was服务无法保持会话的主要内容,如果未能解决你的问题,请参考以下文章

保持SSH会话活动[关闭]

Nginx 会话保持

会话保持解决方案及NetScaler会话保持概述

iis服务无法启动(找不到W3SVC 和WAS服务)

跨域登录

在调用 ASMX Web 服务时保持会话