无法对多个 GWT 应用程序使用相同的 cookie

2023-12-09

我正在开发一个应用程序网络,我想向我的用户提供多个应用程序,他们只需注册/登录一次,并通过同一登录名使用所有应用程序。

为了实现这一点,我创建了一个 cookie,在其中存储用户的会话 ID(他在登录时收到)。每次用户打开应用程序时,启动模块都会尝试查找 cookie 并向服务器发送请求以检查该会话是否仍然有效。

当我在本地开发计算机上对此进行测试时,一切正常,但在我的预上线测试服务器上,另一个应用程序找不到我在一个应用程序中创建的 cookie。

我的测试服务器是 Tomcat 7。 部署到 .war-upload 的应用程序

Cookie 最初是使用以下命令创建的:Cookies.setCookie("WebsiteName", result.getSessionId());

感谢每一个帮助!

Edit 1

我在让一切按照我想要的方式工作方面取得了进一步的进展。

本来我并没有实现HttpServlet Session,而是实现了一个自己的Session管理系统,在cookie中存储了我自己的session ID。检查服务器日志,我发现,如果两个应用程序都部署在子路径下,则应用程序 1 的会话输出如下:

Test HttpSession ID: 34446C7F3F345F74A0AAB5E292A47021 | Own Session ID: 3a25884692c499d5e72f07bb2b214a40f63f5a4a842852c58f30e1b46cf7bee7bc8a3394a9fe83a04ac4e1dcb4069dbca95a8f0001e012bc643934e08af35ec2 

且对于应用 2

Test HttpSession ID: 429388DE8F0F76F877B077433FE16B66 | Own Session ID: 4e6b19a7621893de0cd0826b298ea4d8eb5ffecf4a7503f3274f729c2df28f4a1e9ce52179730b4139804f256591149fd712be76ad3afd87bade4f58aab4234f

我怀疑 Tomcat 会为每个 Web 应用程序生成另一个会话 ID,因此我将主应用程序的 .war-File 重命名为ROOT.war并将其部署为 Root 应用程序。 ROOT 应用程序的输出如下:

Test HttpSession ID: B9F2D14A716C3A06E328F58ED0995D95 | Own Session ID: 039b1c0cd2726dcfa1d8585da589e05984cfb6c971e083423d8456673837ea954ead42728aecf93be358ed13c757e3848ee3eb061a2253350c7d6dc1a14c970c

AND 对于路径中的应用程序root/webapp1/:

Test HttpSession ID: BFD836C297B1BF8204D243387401CCA7 | Own Session ID: 039b1c0cd2726dcfa1d8585da589e05984cfb6c971e083423d8456673837ea954ead42728aecf93be358ed13c757e3848ee3eb061a2253350c7d6dc1a14c970c

自己的Session ID存储在cookie中并由服务器检查。我的结论是,浏览器为我的域的每个子路径创建不同的 cookie。

向 Cookie 添加域名终于成功了,愚蠢的我:-)


你检查过日志吗?您在日志或开发人员工具控制台(firebug?)中遇到什么错误?详细的日志将有助于获得答案。

然而,如果您遵循了正确的方法,您正在尝试的方法绝对是可能的。

Step 1:创建会话

 void createSession(String Username) 
 {
    getThreadLocalRequest().getSession().setAttribute("Username", Username);
 }

Step 2:正确设置cookie

String sessionID = /*(Get sessionID from server's response to your login request.)*/;
final long DURATION = 1000 * 60 * 60 * 24 * 14; 
Date expires = new Date(System.currentTimeMillis() + DURATION);
Cookies.setCookie("sessionId", sessionID, expires, null, "/", false);

Step 3:根据您设置的 cookie 和用户凭据验证用户会话。

boolean sessionAndUserValidFlag = false;
String sessionID = Cookies.getCookie("sessionId");
if ( sessionID != null )
{
   sessionAndUserValidFlag = validateSession(sessionID);
}
if (sessionAndUserValidFlag)
{
   //Continue login
}
else
{
  //Display Login Popup
}

您的 validateSession 方法可能看起来像这样

public boolean validateSession(String sessionId)
{
    if (getThreadLocalRequest().getSession().getId.equals(sessionId))
    {
       if ( getThreadLocalRequest().getSession().getAttribute("UserName") != null )
       {
             return true;
       }
    }
    return false;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法对多个 GWT 应用程序使用相同的 cookie 的相关文章

  • GWT 2 CssResource 如何

    我有一个 GWT 1 7 应用程序 我想将其升级到 GWT 2 Milestone 2 该应用程序使用 2 个大的外部 CSS 文件 在 GWT 1 7 中 我有一个公共文件夹 并将 CSS 文件放入该文件夹中 我的应用程序编译并运行良好
  • 检测 ASP.NET MVC 上的会话过期

    我构建了一个购物车 它使用会话状态在用户浏览商店时保留购物车数据 我遇到一个问题 如果我在购物车的第 1 步上长时间打开浏览器窗口 然后按 转到第 2 步 我的操作会引发错误 因为第 2 步操作假定会话尚未过期并且ShopCart 对象处于
  • CookieManager.getInstance().removeAllCookie();不删除所有cookie

    我在应用程序的 onCreate 中调用 CookieManager getInstance removeAllCookie 我遇到了一个奇怪的问题 我看到 GET 请求中传递了意外的 cookie 值 事实上 cookie 值是一个非常非
  • Java HttpSession 属性存储在哪里?

    对象是否被序列化并发送给用户并在每个连接上返回 存储在 cookie 中 或者它们存储在服务器堆中并且cookie只是一个非常小的标识符 有关此主题的任何信息都会有所帮助 谢谢 你第二次猜到了 该 cookie 包含一个 JSESSIONI
  • 从所有会话中注销

    我有一个注销选项 这是我的代码 session start session destroy setcookie key time 60 60 24 setcookie username time 60 60 24 我想添加另一个选项来注销所
  • HttpSession 内的同步是否可行?

    UPDATE 问题后立即解决 问题 通常 同步是在 JVM 内序列化并行请求 例如 private static final Object LOCK new Object public void doSomething synchroniz
  • gwt 中的垂直居中

    如何使用垂直面板在 gwt 中垂直居中 或者请告诉我有什么方法可以进行垂直居中 如果你想直接使用VerticalPanel从代码中 您需要使用setVerticalAlignment HasVerticalAlignment ALIGN M
  • Hibernate Session 刷新行为 [ 和 Spring @Transactional ]

    我在网络应用程序中使用 Spring 和 Hibernate SessionFactory被注入到DAO bean中 然后通过webservicecontext在Servlet中使用该DAO DAO 方法是事务性的 在我使用的方法之一内 g
  • 我可以更改 FormsAuthentication cookie 名称吗?

    我可以更改 FormsAuthentication cookie 名称吗 如果是 如何 我遇到的问题是 当我在同一个域中部署两个 Web 应用程序时 当任何人登录时 第二个应用程序将自动注销 因为它们使用相同的身份验证 cookie 名称
  • 是否有其他方法可以访问延迟自定义操作中的会话详细信息?

    我有一个自定义操作 需要获取以下值才能将某些部分从安装文件夹复制到 VS2010 文件夹 VS2010目录路径 VS2010DEVENV财产 安装路径 INSTALLLOCATION财产 为了提供足够的权限 我将自定义操作设置为Execut
  • 还记得我的 Cookie 最佳实践吗?

    我读到了许多关于这个论点的老问题 我认为最好的做法是设置一个 cookieusername user id和一个随机令牌 相同 cookie 的数据在 cookie 创建时存储在数据库中 当用户拥有 cookie 时 它 们会进行比较 co
  • AttachEvent 是什么

    我真的不明白 AttachEvent 类或 addAttachHandler 是什么 这有什么用呢 有人可以为此发布一个例子吗 多谢 AttachEvent 会在 Widget 附加到实际页面或从实际页面分离时通知您 如果某个东西没有附加
  • GWT - 让 CellTable 单元格使用 HTML?

    我有一个 CellTable 我想将 HTML 代码放入单元格中 以下代码不起作用 空格已从输出中删除 TextColumn
  • PHP Session Id 在页面之间发生变化

    我有一个问题 我在 2 个页面之间丢失了 PHP 会话 session start 包含在一个名为 session inc php 的文件中 该文件包含在每个需要设置会话的页面中 这适用于网站上除一个特定页面 member profile
  • PHP 会话不会在每个请求上延长 Cookie 过期时间

    session start 是否应该通过 session gc maxlifetime 变量来延长会话 ID cookie 的寿命 我的 session gc maxlifetime 是 24 分钟 每个会话仅存活 24 分钟 无论网站上有
  • 如何设置cookie值?

    我正在执行以下操作来设置 cookie 值 HttpCookie mycookie new HttpCookie mycookie mycookie Value value1 Case sensitivity mycookie Expire
  • ServiceStack 身份验证中 httponly ss-tok bearerToken cookie 的意义是什么

    我从安全角度理解 Set Cookie 响应标头值的 httponly 标志的概念并防止 XSS 攻击 我不明白的是 ServiceStack 对保存 bearerToken 的 ss tok cookie 做了什么 根据服务堆栈文档 ht
  • 如何在 Jquery 中设置 cookie 在 1 分钟或 30 秒后过期?

    如何将 cookie 设置为在 30 秒或 1 m 后过期 这是我的代码 cookie username username expires 14 expires after 14 days 1 分钟内 您可以使用 var date new
  • 修改不同Django用户的会话数据

    这可能不可能 但是当某些情况发生时 我想修改某些登录用户的会话数据 标记一些额外的逻辑需要在下次加载页面时运行 有没有办法通过用户 ID 访问用户的会话 tldr Query Session模型 然后通过修改匹配会话SessionStore
  • 在同一服务器上的 2 个子域中安装 2 个 WordPress 时共享用户

    我有 2 个 WordPress 网站 位于 2 个不同的子域中 例如test1 abc com and test2 abc com 这两个网站都激活了 wp require 插件 只有登录用户才能看到该网站 我们想要创建一个系统 如果用户

随机推荐

  • 如何使用 SMOTE 将合成数据集保存在 CSV 文件中

    我使用信用卡数据通过 SMOTE 进行过采样 我正在使用 geeksforgeeks org 中编写的代码 Link 运行以下代码后 它会显示类似以下内容 print Before OverSampling counts of label
  • 字符串周日期到冷融合日期

    我需要格式化一个字符串日期 如下所示 2021 W46 变成我可以在冷融合中使用的东西parseDateTime or dateFormat功能 W46在本例中是第 46 周 我尝试的是直接将该字符串放入parseDateTime and
  • Java并发——发布不可变对象(Java并发实践)

    在 Java Concurrency In Practice 一书中 作者指出 不可变对象可以通过任何机制发布 任何线程都可以安全地使用不可变对象 无需额外的同步 即使不使用同步来发布它们也是如此 这是否意味着以下习惯用法可以安全地发布不可
  • 在 Java 中使用 SWIG 处理返回指向结构数组的指针的 C 函数

    我试图找出需要进行哪些 SWIG 接口文件更改才能处理 getFoo 返回指向自定义结构数组 sender id t 的指针 没有任何特殊的 SWIG 接口代码 我只得到 Java 端的指针 如何将该指针转换为可以循环或迭代的对象 在 Ja
  • 从 NSExpression 捕获 NSInvalidArgumentException

    在我的代码中 我将字符串评估为数学表达式 例如 NSString formula 9 7 NSExpression expr NSExpression expressionWithFormat formula NSLog expr expr
  • c# 为什么当路径为“C:”时,directoryInfo 将我带到应用程序文件夹?

    为什么当我给出路径 c 时它直接将我更改为应用程序文件夹 static void Main string args DirectoryInfo dir new DirectoryInfo c Console WriteLine dir Fu
  • 如何针对 64 位优化 .NET 网站和应用程序?

    如何在 NET 2 0 Web 应用程序和控制台 表单应用程序中充分利用 64 位架构 我认为在 32 位与 64 位架构方面 您的托管 NET 代码中没有太多可以优化的地方 这是因为大多数差异和优化很可能已经由底层虚拟机实现 正如中提到的
  • 一段时间后显示 UIAlertView

    我试图在一段时间后显示 UIAlertView 比如在应用程序中执行某些操作后 5 分钟 如果应用程序已关闭或在后台运行 我已经通知用户 但我想在应用程序运行时显示 UIAlertView 我尝试按如下方式调度异步 但警报永远弹出 NSTh
  • URL 以句点结尾的 WebClient 问题

    我正在运行以下代码 using WebClient wc new WebClient string page wc DownloadString URL 要访问股价网站的 URL http www shareprice co uk 如果您将
  • JPA:级联删除不会删除子级

    编辑 修改问题以更好地反映问题 最初发布的问题here 我有一个父母 Context 和一个孩子 User 实体 多对一关系 父级上的级联 REMOVE 不会删除子级 代码如下 Owning side child Entity public
  • 如何在Python中获取CSV文件的总行数?

    我正在使用 python Django 框架 来读取 CSV 文件 如您所见 我仅从该 CSV 中提取了 2 行 我一直在尝试做的是将 CSV 的总行数存储在变量中 如何获得总行数 file object myfilePath fileOb
  • OpenCart - 不发送电子邮件(通知或联系页面)

    据我所知 我的邮件设置配置正确 但我没有收到任何电子邮件 不是通过联系表单收到的 也没有收到新客户或下的任何订单的电子邮件 这是我当前的设置 我试过了 更改为 SMTP 我收到错误 我的主机 IXWebHosting 说我 需要在应用程序内
  • 在react-native中使用函数的区别

    假设我有一个向其传递函数的组件 export default class SomeComp extends Component constructor props super props someFunc gt return render
  • 在 JTextArea 中插入文本

    我正在用Java开发一个简单的应用程序 我想知道是否有任何方法可以在文本区域内插入附加文本 句子中间的某个位置 该文本区域不是空的 在光标所在的位置某些组件的点击 有人可以指导我如何完成它吗 如果这是一个JTextArea组件你可以使用 a
  • 普遍适用

    如何制作适用于 iphone 和 ipad 的通用应用程序 我们如何检测设备是 iPhone 还是 iPad 最简单的方法是使用UI USER INTERFACE IDIOM UIUserInterfaceIdiomPad and UI U
  • CSS 选择器中的逗号是什么意思? [复制]

    这个问题在这里已经有答案了 当我拥有时这意味着什么 A B A C some styles 这是否意味着B类没有样式定义 这意味着两者 A B and A C共享相同的声明块 逗号表示将该块中的声明应用于这两个选择器 而逗号后面的换行符并不
  • 在我的应用程序中使用锁屏?

    我想让我的应用程序在多任务处理时使用锁定屏幕上的音频按钮 是的 就像潘多拉一样 我想要使 用什么 API See the 多媒体远程控制文档 基本上 你只需要调用 beginReceivingRemoteControlEvents在您的共享
  • 通过迁移向列添加默认值

    如何通过迁移向已存在的列添加默认值 我能找到的所有文档都会向您展示如何在该列尚不存在的情况下执行此操作 但在本例中它确实存在 您应该这样做 change column users admin boolean default gt false
  • 反引号作为语法运算符

    刚刚遇到了一些对我来说似乎很奇怪的事情 反引号的功能类似于语法运算符 applyOp Int gt Int gt Int gt Int gt Int gt Int applyOp x op y x op y gt applyOp 2 5 7
  • 无法对多个 GWT 应用程序使用相同的 cookie

    我正在开发一个应用程序网络 我想向我的用户提供多个应用程序 他们只需注册 登录一次 并通过同一登录名使用所有应用程序 为了实现这一点 我创建了一个 cookie 在其中存储用户的会话 ID 他在登录时收到 每次用户打开应用程序时 启动模块都